gpt4 book ai didi

r - 获取跨数据框列的频率计数的更有效方法

转载 作者:行者123 更新时间:2023-12-04 11:12:32 27 4
gpt4 key购买 nike

我有一些调查数据,其中列对应于项目,行对应于客户,表示他们购买每件商品的可能性。看起来像这样:

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])

注意我真的不需要频率计数,只需要百分比。

提前致谢!

最佳答案

由于您在每个项目中具有相同的值范围#您可以使用

sapply(df, function(x) prop.table(table(x)))
# item1 item2 item3
# Likely 0.50 0.25 0.25
# Unlikely 0.25 0.50 0.25
# Very Likely 0.25 0.25 0.50

但是,如果它们不同,您可以将每个 item# 设置为一组通用的级别
df[] <- lapply(df, factor, levels=unique(unlist(df)))
sapply(df, function(x) prop.table(table(x)))

关于r - 获取跨数据框列的频率计数的更有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com