如何用不同长度的字符串计算频率

时间:2015-12-05 12:46:44

标签: r string frequency

我在R开始,有时对我来说有点困难。我有一个100000观测的大数据框,在这个数据框中我有一个列id,我需要计算列中最常见的id。但问题是,字符串中有时会有不同的id由'&'分隔。 我会保留一个例子,这样更容易:

id             value
1                1
1                2
2&3&4            6
2&5&7&8          1
2&4&5            3
2                3

所以,我应该获得2个 可以到20'和''在一个字符串中。

提前致谢,

1 个答案:

答案 0 :(得分:2)

数据似乎是这样的:

df<-structure(list(id = structure(c(1L, 1L, 3L, 5L, 4L, 2L), .Label = c("1", 
"2", "2&3&4", "2&4&5", "2&5&7&8"), class = "factor"), value = c(1L, 
2L, 6L, 1L, 3L, 3L)), .Names = c("id", "value"), class = "data.frame", row.names = c(NA, 
-6L))

第一步是拥有一个包含所有ids

的向量
unlist(strsplit(as.character(df[,1]),'&'))
# [1] "1" "1" "2" "3" "4" "2" "5" "7" "8" "2" "4" "5" "2"
然后我们得到频率:

table(unlist(strsplit(as.character(df[,1]),'&')))

# 1 2 3 4 5 7 8 
# 2 4 1 2 2 1 1 

然后我们以最高频率显示数字(表按降序排列):

names(sort(table(unlist(strsplit(as.character(df[,1]),'&'))),decreasing=T)[1])
# [1] "2"