我想做的是相反的事情:
library(splitstackshape)
temp <- head(concat.test) [-3:-4]
cSplit_e(temp, "Likes", fill = 0)[-2]所以还这个:

回到:

发布于 2022-01-31 01:26:14
set.seed(42)
dat <- data.table(name = LETTERS[1:5])[, c(.SD, replicate(6, sample(0:1, size=5, replace=TRUE), simplify=FALSE))]
dat
# name V2 V3 V4 V5 V6 V7
# <char> <int> <int> <int> <int> <int> <int>
# 1: A 0 1 0 0 0 1
# 2: B 0 1 1 1 0 0
# 3: C 0 1 0 1 0 0
# 4: D 0 0 1 1 0 0
# 5: E 1 1 0 1 0 0
dat[, .(name, Likes = apply(as.matrix(.SD[,-1]), 1, function(z) toString(which(z > 0))))]
# name Likes
# <char> <char>
# 1: A 2, 6
# 2: B 2, 3, 4
# 3: C 2, 4
# 4: D 3, 4
# 5: E 1, 2, 4发布于 2022-01-31 01:50:46
另一种方法是以长格式获取数据,并将每个name中有1列的列连接起来。
使用@r2evans的数据-
library(dplyr)
library(tidyr)
dat %>%
pivot_longer(cols = -name, names_to = 'col') %>%
mutate(col = sub('V', '', col)) %>%
group_by(name) %>%
summarise(Likes = toString(col[value == 1]))
# name Likes
# <chr> <chr>
#1 A 3, 7
#2 B 3, 4, 5
#3 C 3, 5
#4 D 4, 5
#5 E 2, 3, 5https://stackoverflow.com/questions/70919744
复制相似问题