gpt4 book ai didi

r - 将分隔的字符串拆分为 R 数据框中的不同列

转载 作者:行者123 更新时间:2023-12-02 08:31:42 24 4
gpt4 key购买 nike

我需要一种快速简洁的方法来将数据帧中的字符串文字拆分为一组列。假设我有这个数据框

data <- data.frame(id=c(1,2,3), tok1=c("a, b, c", "a, a, d", "b, d, e"), tok2=c("alpha|bravo", "alpha|charlie", "tango|tango|delta") )

(请注意列之间的不同分隔符)

通常事先不知道字符串列的数量(尽管如果我没有其他选择,我可以尝试发现整组情况)

我需要两个这样的数据框:

tok1.occurrences:
+----+---+---+---+---+---+
| id | a | b | c | d | e |
+----+---+---+---+---+---+
| 1 | 1 | 1 | 1 | 0 | 0 |
| 2 | 2 | 0 | 0 | 1 | 0 |
| 3 | 0 | 1 | 0 | 1 | 1 |
+----+---+---+---+---+---+

tok2.occurrences:
+----+-------+-------+---------+-------+-------+
| id | alpha | bravo | charlie | delta | tango |
+----+-------+-------+---------+-------+-------+
| 1 | 1 | 1 | 0 | 0 | 0 |
| 2 | 1 | 0 | 1 | 0 | 0 |
| 3 | 0 | 0 | 0 | 1 | 2 |
+----+-------+-------+---------+-------+-------+

我试过使用这种语法:

tok1.f = factor(data$tok1)
dummies <- model.matrix(~tok1.f)

这最终导致了一个不完整的解决方案。它正确地创建了我的虚拟变量,但没有(显然)根据分隔符拆分。

我知道我可以使用“tm”包来查找文档术语矩阵,但对于这种简单的标记化来说似乎太过分了。有没有更直接的方法?

最佳答案

我能想到的最简单的方法是使用 my cSplit function结合 dcast.data.table,像这样:

library(splitstackshape)
dcast.data.table(cSplit(data, "tok1", ", ", "long"),
id ~ tok1, value.var = "tok1",
fun.aggregate = length)
# id a b c d e
# 1: 1 1 1 1 0 0
# 2: 2 2 0 0 1 0
# 3: 3 0 1 0 1 1

dcast.data.table(cSplit(data, "tok2", "|", "long"),
id ~ tok2, value.var = "tok2",
fun.aggregate = length)
# id alpha bravo charlie delta tango
# 1: 1 1 1 0 0 0
# 2: 2 1 0 1 0 0
# 3: 3 0 0 0 1 2

编辑:使用 library(splitstackshape) 更新,因为 cSplit 现在是该包的一部分。

关于r - 将分隔的字符串拆分为 R 数据框中的不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26012169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com