我想了解dplyr。我正在按數據組,分箱和符號分割數據框中的值,並且我正在嘗試爲每個組/ bin /符號組合獲取平均值。我想輸出一個數據框,每個組/ bin /符號組合的這些計數以及每個組的總數。我想我有它,但有時我得到不同的值在基地R與ddplyr的輸出相比。我是否正確地做這件事?它也很扭曲...有沒有更直接的方法?dplyr:按組查找每個垃圾箱的平均值
library(ggplot2)
df <- data.frame(
id = sample(LETTERS[1:3], 100, replace=TRUE),
tobin = rnorm(1000),
value = rnorm(1000)
)
df$tobin[sample(nrow(df), 10)]=0
df$bin = cut_interval(abs(df$tobin), length=1)
df$sign = ifelse(df$tobin==0, "NULL", ifelse(df$tobin>0, "-", "+"))
# Find mean of value by group, bin, and sign using dplyr
library(dplyr)
res <- df %>% group_by(id, bin, sign) %>%
summarise(Num = length(bin), value=mean(value,na.rm=TRUE))
res %>% group_by(id) %>%
summarise(total= sum(Num))
res=data.frame(res)
total=data.frame(total)
res$total = total[match(res$id, total$id),"total"]
res[res$id=="A" & res$bin=="[0,1]" & res$sign=="NULL",]
# Check in base R if mean by group, bin, and sign is correct # Sometimes not?
groupA = df[df$id=="A" & df$bin=="[0,1]" & df$sign=="NULL",]
mean(groupA$value, na.rm=T)
我要瘋了,因爲它並不在我的數據工作,這個命令只是重複整個數據集的平均值:
ddply(df, .(id, bin, sign), summarize, mean = mean(value,na.rm=TRUE))
在平均等於平均(值,NA .rm格式= TRUE),完全無視組...所有羣體因素,並且值是數字...
但是這工作:
with(df, aggregate(df$value, by = list(id, bin, sign), FUN = function(x) c(mean(x))))
請幫助我..
看起來你也使用'magrittr',行'res <- df %<>%...'有兩個分配,因爲'%<>%'分配和管道。可能你只需要一個普通的管道'%>%'。按原樣,當您運行該代碼時,您正在更新'df'以及'res'。 – Gregor
什麼是'cut_interval()'? – tospig
對不起,cut_interval來自ggplot2 ...它仍然不能這樣工作,我得到的所有垃圾桶的相同平均值... – user971102