【发布时间】:2017-06-16 04:11:47
【问题描述】:
我有一些调查数据,其中列对应于商品,行对应于客户,说明他们购买每件商品的可能性。看起来像这样:
item1 = c("Likely", "Unlikely", "Very Likely","Likely")
item2 = c("Likely", "Unlikely", "Very Likely","Unlikely")
item3 = c("Very Likely", "Unlikely", "Very Likely","Likely")
df = data.frame(item1, item2, item3)
我想要一个汇总表,给出每个项目的每个响应的百分比。现在我在这个过程的每一列上使用 table() ,它有很多代码需要操作。我怎样才能使用 plyr 或 apply 或更快的东西来做到这一点?
目前的解决方案:
d1<-as.data.frame(table(df$item1))
d1$item1_percent<- d1$Freq/sum(d1$Freq)
names(d1)<-c("Response","item1_freqs","item1_percent")
d2<-as.data.frame(table(df$item2))
d2$item2_percent<- d2$Freq/sum(d2$Freq)
names(d2)<-c("Response","item2_freqs","item2_percent")
d3<-as.data.frame(table(df$item3))
d3$item3_percent<- d3$Freq/sum(d3$Freq)
names(d3)<-c("Response","item3_freqs","item3_percent")
results<-cbind(d1,d2[,2:3],d3[,2:3])
请注意,我真的不需要频率计数,只需要百分比。
提前致谢!
【问题讨论】:
-
lapply(df, function(x) prop.table(table(x)))