【问题标题】:Summarize and Transpose rows to columns in R汇总并将行转置到 R 中的列
【发布时间】:2020-12-20 05:20:54
【问题描述】:

这是我的输入数据:

Program = c("A","A","A","B","B","C")
Age = c(10,30,30,12,32,53)
Gender = c("F","F","M","M","M","F")
Language = c("Eng","Eng","Kor","Kor","Other","Other")
df = data.frame(Program,Age,Gender,Language)

我想输出这样的表格:

Program MEAN AGE ENG KOR FEMALE MALE
A
B
C

其中 MEAN AGE 是平均年龄,ENG,KOR,FEMALE,MALE 是计数。

我尝试过使用 dplyr 和 t() 但在这种情况下,我觉得我完全不知道步骤是什么(我的第一篇文章,对此的新手)。提前谢谢!

【问题讨论】:

    标签: r dataframe dplyr transpose summary


    【解决方案1】:

    您可以采取以下方法:

    library(dplyr)
    
    df %>%
      group_by(Program) %>%
      summarise(
        `Mean Age` = mean(Age),
        ENG = sum(Language=="Eng"),
        KOR = sum(Language=="Kor"),
        Female = sum(Gender=="F"),
        Male = sum(Gender=="M"),
        .groups="drop"
      )
    

    输出:

    # A tibble: 3 x 6
      Program `Mean Age`   ENG   KOR Female  Male
      <chr>        <dbl> <int> <int>  <int> <int>
    1 A             23.3     2     1      2     1
    2 B             22       0     1      0     2
    3 C             53       0     0      1     0
    

    注意: .groupsdplyr 函数的特殊变量。这里使用的方式相当于计算后使用%&gt;% ungroup()。如果您在 summarise 函数中键入任何其他名称,它将假定它是一个列名称。

    【讨论】:

    • 感谢您的回答,但是当我尝试这样做时,我只得到一行数据,其中有一列名为 .group
    • 您是否在此处复制了确切的代码块?它对我来说正常工作。您使用的是哪个版本的dplyr?我使用的是 1.0.2 版本。
    • 如果您有一个名为 .group 的列,您没有复制我提供的确切代码。我猜你输入了.group="drop"(它应该包括“s”)。请复制粘贴看看是否有效。
    • 是的,我复制了确切的块。似乎它没有正确读取 group_by 函数,因为没有程序列。我正在使用 0.8.5
    • 我没有收到任何警告...我建议更新软件包,因为它自 0.8.5 版以来已获得 a lot of functionalities。比如.groups出现在1.0.0版本
    【解决方案2】:

    在基础 R 中你可以这样做:

    df1 <- cbind(df[1:2], stack(df[3:4])[-2])
    cbind(aggregate(Age~Program, df, mean),as.data.frame.matrix(table(df1[-2])))
      Program      Age Eng F Kor M Other
    A       A 23.33333   2 2   1 1     0
    B       B 22.00000   0 0   1 2     1
    C       C 53.00000   0 1   0 0     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多