我的数据由关于小部件集合的成对观察组成,但成对的观察可以是任意顺序的.

library(data.table)
library(dplyr)
dt <- data.table(
  V1 = c("B", "A", "D", "A", "G", "B", "C", "C", "E", "C"),
  V2 = c("A", "B", "C", "B", "C", "E", "D", "B", "B", "G")
)

我希望能够列出我Collection 中的不同小部件(A:B和B:A是一回事). Dplyr通过以下方式成功实现了这一点:

ordered <- dt %>%
  rowwise() %>%
  mutate(widget= paste(sort(c(V1, V2)), collapse = ":")) %>%
  group_by(widget) %>% 
  distinct(widget)

由于我的数据集很大,观测数据非常长,我希望将代码转换为data.table,但找不到适当的行式操作. 我怀疑这可能是一件很合适的事情,大概是这样的:

orderedDT <- dt[, 
                j= widget:=lapply(.SD, function(x){paste(sort(x),collapse = ":")}), 
                by = .(V1, V2), 
                .SDcols = c("V1", "V2")]

但这并不能产生正确的结果.感谢您阅读这篇文章和您的建议.

推荐答案

你可以试试

> as.data.table(unique(t(apply(dt, 1, s或t))))
   V1 V2
1:  A  B
2:  C  D
3:  C  G
4:  B  E
5:  B  C

> dt[, .(widget = unique(paste0(pmin(V1, V2), ":", pmax(V1, V2))))]
   widget
1:    A:B
2:    C:D
3:    C:G
4:    B:E
5:    B:C

R相关问答推荐

仅在ggplot的每个方面绘制最丰富的物种

生成具有受控相关性的x和y

即使声明引发错误,R函数也会在第二次try 时返回结果

使用facet_wrap()时如何将面板标题转换为脚注?

将一个载体的值相加,直到达到另一个载体的值

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

根据列表中项目的名称多次合并数据框和列表

r替换lme S4对象的字符串的一部分

在另一个函数中调用ggplot2美学

在R中无法读入具有Readxl和lApply的数据集

如何通过判断数据框的一列来压缩另一列?

悬崖三角洲超大型群数计算导致整数溢出

从多个可选列中选取一个值到一个新列中

如何在PDF格式的kableExtra表格中显示管道字符?

在R中,如何将误差条放置在堆叠的每个条上?

如何阻止围堵地理密度图?

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

如何根据未知数的多列排除重复行

按两个条件自动过滤数据

把代码写成dplyr中的group_by/摘要更简洁吗?