1
我在数据框中有一列列表。我试图将列表拆分为数据集中的变量。在数据框中将列表拆分为二进制变量R
例如,我有一个数据集的列是像
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。
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
请显示一个小的可重复的示例和预期的输出,供其他人调试您的问题 – akrun
@akrun谢谢!用可重现的代码编辑。 –
当元素不存在时,如何在预期输出中获得这些值1并不清楚。例如'b,c,e 5 0 0 0 1 1' – akrun