我正在尝试汇总数据框的多个列,每个列包含具有相同级别的数据,以便更容易使用。
我从类似下面的数据框开始,其中各种各样的人对他们生活中的许多方面表示满意:
person=as.factor(c("Jack","Jack","John","Jill"))
job=as.factor(c("happy","sad","very happy","sad"))
home=as.factor(c("happy","sad","very happy","happy"))
car=as.factor(c("happy","sad","sad","happy"))
df<-data.frame(person,job,home,car)
我希望将其转换为以下格式:
我相信这将更容易在R中继续使用,对于excel中的其他用户。
我试图融合/转换数据并使用table()和count()函数,但我无法实现结果。
答案 0 :(得分:4)
感觉像是一个骗局,但这是尝试使用reshape2::recast
只是melt/dcast
包装
library(reshape2)
recast(df, variable ~ value, id.var = 1L)
# Aggregation function missing: defaulting to length
# variable happy sad very happy
# 1 job 1 2 1
# 2 home 2 1 1
# 3 car 2 2 0
如果数据非常大,我们也可以实现data.table
等效
library(data.table)
dcast(melt(setDT(df), 1L), variable ~ value)
# Aggregate function missing, defaulting to 'length'
# variable happy sad very happy
# 1: job 1 2 1
# 2: home 2 1 1
# 3: car 2 2 0
在这两种方法中,您可以为不同的聚合函数指定fun.aggregate =
。