下面我有一個示例數據框。 (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中?
下面我有一個示例數據框。 (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中?
我喜歡使用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
在基礎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。這可能也會起作用:'setNames(as.data.frame.matrix(table(dat)),c(「Yes」,「No」))'' – A5C1D2H2I1M1N2O1R2T1
需求'文本='對於要創建的表。 – jbaums
@jbaums謝謝,以上更正 –
謝謝你的幫助。^_^ – Ianthe