繁体   English   中英

在 R 中汇总行并将其转置为列

[英]Summarize and Transpose rows to columns in R

这是我的输入数据:

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)

我想 output 像这样的表:

程序 平均年龄 英文 韩国 女性 男性
一个
C

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

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

您可以采取以下方法:

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"
  )

Output:

# 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函数的特殊变量。 这里使用的方式相当于在计算后使用%>% ungroup() 如果您在summarise function 中键入任何其他名称,它将假定它是列名称。

在基础 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM