我在下面有一个示例数据框。 (1表示是,2表示否)
Age Range Ans
10 - 20 1
21 - 30 2
31 - 40 1
10 - 20 2
21 - 30 2
21 - 30 1
21 - 30 2
期望的输出:
Age_Range Yes No
10 - 20 1 1
21 - 30 1 3
31 - 40 1 0
我怎样才能在R?
中完成答案 0 :(得分:6)
在基地R中,您基本上只是要求table
:
table(dat$Age.Range, dat$Ans)
# 1 2
# 10 - 20 1 1
# 21 - 30 1 3
# 31 - 40 1 0
如果您想将其转换为列名:
tab <- table(dat$Age.Range, dat$Ans)
data.frame(Age_Range=rownames(tab), Yes=tab[,"1"], No=tab[,"2"])
# Age_Range Yes No
# 10 - 20 10 - 20 1 1
# 21 - 30 21 - 30 1 3
# 31 - 40 31 - 40 1 0
答案 1 :(得分:1)
我喜欢使用data.table
来完成这些任务。
制作数据框:
library(data.table)
df <- read.table(text='Age Range Ans
10 - 20 1
21 - 30 2
31 - 40 1
10 - 20 2
21 - 30 2
21 - 30 1
21 - 30 2',row.names=NULL)
df <- as.data.table(df)
df[,`Age Range`:=paste(row.names,Age,Range)]
尝试
df[,list(Yes=sum(Ans==1),No=sum(Ans==2)),by=`Age Range`]
# Age Range Yes No
# 1: 10 - 20 1 1
# 2: 21 - 30 1 3
# 3: 31 - 40 1 0
或尝试dplyr
方法:
library(dplyr)
df %.% group_by(`Age Range`) %.% summarize(Yes=sum(Ans==1),No=sum(Ans==2))
# Age Range Yes No
# 1 10 - 20 1 1
# 2 21 - 30 1 3
# 3 31 - 40 1 0