获取 R 数据表中一个单元格中多行的 ID



我有一个长格式的数据表:

dt <- data.table(id=1:3, Q1=c(1,2,1), Q2=c(3,1,3), Q3=c("a","b","a"), Q4=c("d","c","d"))
dt
id Q1 Q2 Q3 Q4
1:  1  1  3  a  d
2:  2  2  1  b  c
3:  3  1  3  a  d

如果我做

unique(dt[,Q1:Q4])
Q1 Q2 Q3 Q4
1:  1  3  a  d
2:  2  1  b  c

我得到了唯一的行,但我丢失了id的信息。我只想把这些放在一排,就像这样:

id Q1 Q2 Q3 Q4
1: 1,3  1  3  a  d
2:   2  2  1  b  c

我怎样才能做到这一点?

谢谢

我建议为此设置一个列表列,以防您再次想要不同的id。这与Wimpel的答案没有太大区别,它只是用list代替paste,但它与概念的不同足以爆发:

dt2 <- dt[, .(id = list(id)), by = .(Q1, Q2, Q3, Q4)]
dt2
#       Q1    Q2     Q3     Q4     id
#    <num> <num> <char> <char> <list>
# 1:     1     3      a      d    1,3
# 2:     2     1      b      c      2

有了这个,如果你曾经需要寻找";成员资格";,你仍然可以使用%in%(尽管你需要lapply或类似的(:

dt2[ sapply(id, `%in%`, x = 1), ]
#       Q1    Q2     Q3     Q4     id
#    <num> <num> <char> <char> <list>
# 1:     1     3      a      d    1,3

否则,如果使用类似toStringpaste的内容,则需要使用正则表达式来查找成员资格。

dt[, .(id = paste0(id, collapse = ";")), by = .(Q1, Q2, Q3, Q4)]
#    Q1 Q2 Q3 Q4  id
# 1:  1  3  a  d 1;3
# 2:  2  1  b  c   2

相关内容

最新更新