我在数据框中有一列列表。我试图将列表拆分为数据集中的变量。
例如,我有一个数据集,其列类似于
V1 <- c(1,2,3,4,5)
V2 <- c(1,2,3,4,5)
V3 <- c(1,2,3,4,5)
V4 <- list(list("a","b","c"),
list("a","b","d"),
list("b","c","d"),
list("a","b","e"),
list("b","c","e"))
V5 <- c(1,2,3,4,5)
sample<-NA
sample <- data.frame(V1,V2,V3,I(V4),V5)
在此,v4
包含一列列表
分割列表后,理想的数据框应如下所示
> sample
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 1 1 a, b, c 1 1 1 1 0 0
2 2 2 2 a, b, d 2 1 1 0 0 1
3 3 3 3 b, c, d 3 0 1 1 1 0
4 4 4 4 a, b, e 4 1 1 0 0 1
5 5 5 5 b, c, e 5 0 1 1 0 1
创建的新变量中的数据如果在相应列表中可用,则应为1或0。
这是我做同样的方法,首先,我确定了列表中的所有唯一元素,并使用NA创建了相应的列,然后尝试检查特定变量是否在列表中,然后分配1,否则为0. / p>
features <- c("a","b","c","d","e")
l <-1
for(j in 1:length(sample$V4)){
for(k in 6:10){
for(i in features){
if( i %in% tolower(unlist(sample$V4[[j]]))){
sample[j,k] <-1
print(sample[j,k])
}else{
sample[j,k] <-0
}
print(c(l,k,i,j))
l <- l+1
}
}
}
我不知道这出错了,它给出的结果如下
> sample
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 1 1 a, b, c 1 0 0 0 0 0
2 2 2 2 a, b, d 2 0 0 0 0 0
3 3 3 3 b, c, d 3 0 0 0 0 0
4 4 4 4 a, b, e 4 1 1 1 1 1
5 5 5 5 b, c, e 5 1 1 1 1 1
答案 0 :(得分:2)
我们可以使用mtabulate
qdapTools
library(qdapTools)
sample[paste0("V", 6:10)] <- mtabulate(sample$V4)