【发布时间】:2020-01-29 18:08:13
【问题描述】:
我正在处理一个包含大约 500 列和数千行的数据表,每列代表一个可能会或可能不会出现在字符串中的项目。例如,我的数据看起来像这样
String Item 1 Item 2 Item 3 Item 4
1 "Item 1Item 2Item 4" 0 0 0 0
2 "Item 1Item 2" 0 0 0 0
3 "Item 3" 0 0 0 0
我已将字符串解析为项目编号,结果项目位于列表中(因此,对于上面的第一个观察,列表项目 1 将包含元素“项目 1”、“项目 2”和“项目 4”。
我试图以编程方式更改每列的值,方法是将列表中的每一项用作行的列名,然后将 1 分配给这些列。例如,我可以构建一个简单的 for 循环来执行我正在寻找的操作:
for (i in 1:nrow(data)){
data[i, eval(unlist(listofitems[[i]])) := 1]
}
返回
String Item 1 Item 2 Item 3 Item 4
1 "Item 1Item 2Item 4" 1 1 0 1
2 "Item 1Item 2" 1 1 0 0
3 "Item 3" 0 0 1 0
但是,考虑到数据的大小以及出现类似情况的频率(有时我希望能够对数据表对通过引用分配的列进行逐行操作),我希望可能会有一种更“data.table-y”的方式来获得最终答案。
【问题讨论】:
-
项目和数字之间的空格是故意的还是错字?
-
间距和分隔符不一致。但是,它们已经被解析到我在问题中提到的列表中。我已经编辑了问题,使其与实际数据的格式更加一致。
-
您能否在解析后
dput数据集? -
从 dput-ing 列表中获取的数据样本将是 "c("Item 7.01", "Item 9.01"), c("Item 7.01", "Item 9.01"), c( "Item 2.02", "Item 9.01"), "Item 1.01", c("Item 2.02", "Item 9.01") 其中每个向量都是列表中的一个元素。
-
我猜你改变了输入数据格式
标签: r data.table