汇总R中的行并将其转换为列

汇总R中的行并将其转换为列,r,dataframe,dplyr,transpose,summary,R,Dataframe,Dplyr,Transpose,Summary,这是我的输入数据: 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("E

这是我的输入数据:

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)
我想输出如下表:

节目 平均年龄 英格 库尔 女性 男性 A. B C
您可以采取以下方法:

库(dplyr)
df%>%
分组依据(计划)%>%
总结(
`平均年龄`=平均(年龄),
英语=总和(语言=“英语”),
KOR=总和(语言==“KOR”),
女性=总和(性别=“F”),
男性=总和(性别=“M”),
.groups=“删除”
)
输出:

# 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
#一个tible:3 x 6
项目`平均年龄`英库尔男女
1A 23.3 2 1 2 1
2B22102
3 C 53 0 0 1 0


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

在base 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

df1谢谢你的回答,但是当我尝试这个方法时,我只得到一行数据,列名为。groups。你在这里复制了确切的代码块了吗?这对我来说很正常。您使用的是哪个版本的
dplyr
?我使用的是1.0.2版。如果您有一个名为
.group
的列,您没有复制我提供的确切代码。我猜您键入了
.group=“drop”
(应该包括“s”)。请复制并粘贴,看看它是否有效。是的,我复制了确切的块。由于没有程序列,似乎无法按函数正确读取组_。我使用的是0.8.5我没有收到任何警告。。。我建议更新该软件包,因为它是从0.8.5版开始获得的。例如,
.groups
出现在1.0.0版中