R - 计数在长向量中出现

时间:2018-05-21 18:46:02

标签: r count

我有一个6249行的数据帧,填充了字符类型的数据,可能会变得更大。

我想计算每个字符串的出现次数。通常我会使用table(df)

count(df)

但他们似乎都在250行后停止了。

是否有不同的功能或方法强制count()或table()继续6000+结果?

提前致谢

3 个答案:

答案 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成为具有每个字符串出现次数的向量。