有一个数据框,其中包含如下句子中的单词。我需要一个输出,该输出不显示每个单词出现的次数。
Column 1
Electronic, socket, clamp, cooler
Actuator, cylinder, valve
Hydraulic, electronic, cooler
Actuator, Pnematic, cylinder, valve
我需要以下输出
Column 2 Column 3
Eletronic 2
Socket 1
clamp 1
cooler 2
actuator 2
cylinder 2
valve 2
Hydraulic 1
Electronic 1
Pneumatic 1
答案 0 :(得分:1)
这是基本的R选项。我们可以尝试将sapply
与strsplit
一起使用,以生成字符向量列表,该列表来自原始CSV内容。然后,我们可以unlist
列出该列表以生成一个单独的术语向量,然后按术语进行汇总以生成计数。
df <- data.frame(v1=c("Electronic, socket, clamp, cooler",
"Actuator, cylinder, valve", "Hydraulic, electronic, cooler",
"Actuator, Pnematic, cylinder, valve"), stringsAsFactors=FALSE)
out <- unlist(sapply(df$v1, function(x) { strsplit(x, ",\\s*") }))
aggregate(out, by=list(col2=out), FUN=length)
col2 x
1 Actuator 2
2 Electronic 1
3 Hydraulic 1
4 Pnematic 1
5 clamp 1
6 cooler 2
7 cylinder 2
8 electronic 1
9 socket 1
10 valve 2
请注意,将非规范化CSV数据存储在R(或实际上是任何数据工具)中并不是最佳选择,这将使处理这些数据变得困难。
编辑:
上面的代码假定v1
列是字符,而不是因数。该代码不适用于因子数据,并且会生成“非字符参数”错误。
答案 1 :(得分:0)
假定它是这样读取的,并采用以下格式:
x <- read.table(text="'Column 1'
'Electronic, socket, clamp, cooler'
'Actuator, cylinder, valve'
'Hydraulic, electronic, cooler'
'Actuator, Pnematic, cylinder, valve'", header = TRUE)
data.frame(table(unlist(strsplit(x[,1], ","))))