首页 文章

获取所有可能答案的R频率计数

提问于
浏览
3

我从R开始,我仍然在寻找语法 . 我希望得到一个比例变量的频率,其值为0到10和NA .

Id <- c(1,2,3,4,5)
ClassA <- c(1,NA,3,1,1)
ClassB <- c(2,1,1,3,3)
R <- c(5,5,7,NA,9)
S <- c(3,7,NA,9,5)
df <- data.frame(Id,ClassA,ClassB,R,S)
library(plyr)
count(df,'R')

我得到了结果

R freq
  1  5    2
  2  7    1
  3  9    1
  4 NA    1

我正在寻找结果

R freq
1   0    0
2   1    0
3   2    0
4   3    0
5   4    0
6   5    2
7   6    0
8   7    1
9   8    0
10  9    1
11  10   0
12  NA   1

如果我有向量显示可能的结果

RAnswers <- c(0,1,2,3,4,5,6,7,8,9,10,NA)

如何将其与数据集一起应用以获得上述结果?

2 回答

  • 1

    使用包dplyr可以轻松完成这类任务 . 为了保持R的未使用值,您必须将R定义为因子并使用tidyr的完整函数

    library(dplyr)
    library(tidyr)
    df %>%
        mutate(R = factor(R, levels=1:10)) %>%
        group_by(R) %>%
        summarise(freq=n()) %>%
        complete(R, fill=list(freq=0))
    
  • 1

    这是围绕 table()match()replace() 构建的基本R解决方案:

    freq <- table(df$R,useNA='ifany');
    freq;
    ##
    ##    5    7    9 <NA>
    ##    2    1    1    1
    R <- c(0:10,NA);
    df2 <- data.frame(R=R,freq=freq[match(R,as.integer(names(freq)))]);
    df2$freq[is.na(df2$freq)] <- 0;
    df2;
    ##     R freq
    ## 1   0    0
    ## 2   1    0
    ## 3   2    0
    ## 4   3    0
    ## 5   4    0
    ## 6   5    2
    ## 7   6    0
    ## 8   7    1
    ## 9   8    0
    ## 10  9    1
    ## 11 10    0
    ## 12 NA    1
    

    Edit: 弗兰克有一个更好的答案,这里是你如何在一个因子上使用 table() 来获得所需的输出:

    setNames(nm=c('R','freq'),data.frame(table(factor(df$R,levels=RAnswers,exclude=NULL))));
    ##       R freq
    ## 1     0    0
    ## 2     1    0
    ## 3     2    0
    ## 4     3    0
    ## 5     4    0
    ## 6     5    2
    ## 7     6    0
    ## 8     7    1
    ## 9     8    0
    ## 10    9    1
    ## 11   10    0
    ## 12 <NA>    1
    

相关问题