汇总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版中