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