【问题标题】:Count character values by group in a data.frame在 data.frame 中按组计算字符值
【发布时间】:2016-11-02 14:08:23
【问题描述】:

我有一个包含两列的 data.frame:IDLetter。我需要通过ID 总结Letter 的观察结果。

这里是一个例子:

df = read.table(text = 'ID Letter 
1   A
1   A
1   B
1   A
1   C
1   D
1   B
2   A
2   B
2   B
2   B
2   D
2   F
3   B
3   A
3   A
3   C
3   D, header = TRUE)

我的输出应该是 3 个 data.frames 如下:

df_1

A  3
B  2
C  1
D  1

df_2

A  1
B  3
D  1
F  1 

df_3

A  2
B  1
C  1
D  1

这只是每个 ID 组中字母的计数。我想我可以结合使用tableaggregate 这两个函数,但是怎么做呢?

【问题讨论】:

  • 为什么table(df$ID, df$Letter)不够用?它们不会是单独的 data.frames,尽管不清楚为什么需要这样做,而不仅仅是您对输出格式的第一次猜测。
  • 如果您需要data.frames 中的list,请尝试library(dplyr);lapply(split(df, df$ID), function(x) count(x, ID, Letter) %>% ungroup() %>% select(-ID))
  • 或者只是 lapply(split(df$Letter, df$ID), function(x) as.data.frame(table(factor(x)))) 没有包
  • 看起来是个骗子。

标签: r dataframe count character


【解决方案1】:

感谢@akrun,请看下面我是如何做到这一点的:

#create list of data.frames 

library(dplyr)

lst = lapply(split(df, df$ID), function(x) count(x, ID, Letter) %>% ungroup() %>% select(-ID))

lst = lapply(lst, function(y) y = as.data.frame(y)) #convert data into data.frames

【讨论】:

    【解决方案2】:

    这也适用(使用基础 R):

    lapply(split(df, df$ID), function(x) subset(as.data.frame(table(x$Letter)), Freq != 0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2013-04-28
      相关资源
      最近更新 更多