获取 r data.table 中一个单元格中多行的 ID
get id's of multiple rows in one cell in r data.table
我有一个 data.table 的长格式:
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
我怎样才能做到这一点?
谢谢
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
我建议为此使用一个列表列,以防您再次想要不同的 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
否则,如果您使用 toString
或 paste
之类的东西,则需要使用正则表达式来尝试查找成员资格。
我有一个 data.table 的长格式:
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
我怎样才能做到这一点?
谢谢
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
我建议为此使用一个列表列,以防您再次想要不同的 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
否则,如果您使用 toString
或 paste
之类的东西,则需要使用正则表达式来尝试查找成员资格。