如何处理文本数据?

时间:2014-03-05 01:56:22

标签: r

R中,您有一个包含文字数据的特定数据框,例如第二列有单词而不是数字。如何在第二列中删除带有特定单词(例如“total”)的数据框行? data <- data[-(data[,2] == "total"),]对我不起作用。

此外,还有一种简单的方法可以将这些单词按顺序转换为数字吗? (即,第一个单词变为1,第二个单词变为2,依此类推。)我宁愿不使用循环...

1 个答案:

答案 0 :(得分:2)

您可以使用!来否定。对于序列,请使用seq_alongas.numeric(factor(.)),具体取决于您实际需要的内容。

以下是一些示例数据:

set.seed(1)
mydf <- data.frame(V1 = 1:15, V2 = sample(LETTERS[1:3], 15, TRUE))
mydf
#    V1 V2
# 1   1  A
# 2   2  B
# 3   3  B
# 4   4  C
# 5   5  A
# 6   6  C
# 7   7  C
# 8   8  B
# 9   9  B
# 10 10  A
# 11 11  A
# 12 12  A
# 13 13  C
# 14 14  B
# 15 15  C

让我们删除“V2”列中存在“A”的所有行:

mydf2 <- mydf[!mydf$V2 == "A", ]
mydf2
#    V1 V2
# 2   2  B
# 3   3  B
# 4   4  C
# 6   6  C
# 7   7  C
# 8   8  B
# 9   9  B
# 13 13  C
# 14 14  B
# 15 15  C

现在,让我们创建两个新列。第一个顺序计数列“V2”中每个“单词”的每次出现。第二个将每个唯一的“单词”转换为数字。

mydf2$Seq <- ave(as.character(mydf2$V2), mydf2$V2, FUN = seq_along)
mydf2$WordAsNum <- as.numeric(factor(mydf2$V2))
mydf2
#    V1 V2 Seq WordAsNum
# 2   2  B   1         1
# 3   3  B   2         1
# 4   4  C   1         2
# 6   6  C   2         2
# 7   7  C   3         2
# 8   8  B   3         1
# 9   9  B   4         1
# 13 13  C   4         2
# 14 14  B   5         1
# 15 15  C   5         2