【问题标题】:Frequency table with double condition in RR中具有双重条件的频率表
【发布时间】:2016-01-27 20:31:23
【问题描述】:

我有一个带有 x 值的 data.frame,我想根据两个因素来计算它:第一个是 x 的值,第二个取决于一个因素。这是一个示例

set.seed(111)
A<-data.frame(x=rnorm(n = 100,mean = 5,sd=1))
A$LETTER<-sample(LETTERS[1:2],100,replace=T)
A$int<-cut(A$x,breaks=c(0,3,6,9))

我需要 x 在某个区间内的频率值,但有一个额外的条件。

字母 = A (0,3) x 值和字母 = B (6,9) 值的计数

将两个字母 (3,6) 计为一个

计算第一个条件的倒数

输出可能是一个新的data.frame

说清楚

table(A$int,A$LETTER)
       
         A  B
  (0,3]  2  1
  (3,6] 32 49
  (6,9]  9  7

在这种情况下,第一个总和应该是 2+7,第二个总和应该是 1+9,第三个总和应该是 32+49

【问题讨论】:

    标签: r dplyr plyr frequency


    【解决方案1】:

    你可以试试这个:

    library(dplyr)
    as.integer(table(filter(A, LETTER == 'A')$int) + rev(table(filter(A, LETTER == 'B')$int)))
    

    输出将是:

    [1]  9 81 10
    

    请注意,您实际上并不需要dplyr,您可以按如下方式进行不同的过滤:

    as.integer(table(A[A$LETTER == 'A', ]$int) + rev(table(A[A$LETTER == 'B', ]$int)))
    

    【讨论】:

    • 我认为世界的dplyr版本更好。我可以把它放在一个更大的块中,在那里我有一个更长的数据框和 id 列,我可以 group_by(id) 并为汇总中的每个 ID 做你的魔法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2021-11-09
    • 2019-09-29
    相关资源
    最近更新 更多