我有一个6249行的数据帧,填充了字符类型的数据,可能会变得更大。
我想计算每个字符串的出现次数。通常我会使用table(df)
或
count(df)
但他们似乎都在250行后停止了。
是否有不同的功能或方法强制count()或table()继续6000+结果?
提前致谢
答案 0 :(得分:0)
正如@Gregor注意到的那样,您似乎错误地解释了table
输出,而实际上它正在进行正确的计数。无论如何,这里使用Reduce
解决方案,您应该将数据框和df
列名称所指示的string
替换为您计算的实际数据帧的列名。
# let's create some dataframe with three strings randomly distributed of length 1000
df <- data.frame(string = unlist(lapply(round(runif(1000, 1, 3)), function(i) c('hi', 'ok', 'my cat')[i])))
my.count <- function(word, df) {
# now let's count how many 'b' we found
Reduce(function(acc, r) {
# replace 'string' by the name of the column of your dataframe over which you want to count
if(r$string == word)
acc + 1
else
acc
}, apply(df, 1, as.list), init = 0)
}
# count how many 'my cat' strings are in the df dataframe at column 'string', replace with yours
my.count('my cat', df)
# now let's try to find the frequency of all of them
uniq <- unique(df$string)
freq <- unlist(lapply(uniq, my.count, df))
names(freq) <- uniq
freq
# output
# ok my cat hi
# 490 261 249
# we can check indeed that the sum is 1000
sum(freq)
# [1] 1000
答案 1 :(得分:0)
使用任意大小的数据框执行此操作的一种简单方法是向数据框添加count
字段,然后使用string
count
字段汇总doBy
字段} package - 就像这样:
require(doBy)
df$count <- 1
result <- summaryBy(count ~ string, data = df, FUN = sum, keep.names = TRUE)
答案 2 :(得分:0)
嗯,这不会受欢迎,但最后我通过for循环获得了所需的结果,并获取了子集中的行数。
y <- as.numeric(vector())
x <- as.numeric(vector())
for (i in test$token){
x <- as.numeric(nrow(df[(df$token == i),]))
y <- c(y, x)
}
然后Y成为具有每个字符串出现次数的向量。