復制 2011 示例腳本,aggregate()base R 的函式產生NANs。我想知道是否需要使用更新版本的聚合或類似功能?請指教。
示例s1s2.df可以在這里找到:https ://www.dropbox.com/s/dsqina3vuy0774u/df.csv?dl=0
生成NAN而不是匯總值的代碼:
s1.no.present <- aggregate(s1s2.df$no.present[s1s2.df$sabap==-1], by=list(s1s2.df$month.n[s1s2.df$sabap==-1]),sum)[,2]
s1.no.cards <- aggregate(s1s2.df$no.cards[s1s2.df$sabap==-1], by=list(s1s2.df$month.n[s1s2.df$sabap==-1]),sum)[,2]
s2.no.present <- aggregate(s1s2.df$no.present[s1s2.df$sabap==1], by=list(s1s2.df$month.n[s1s2.df$sabap==1]),sum)[,2]
s2.no.cards <- aggregate(s1s2.df$no.cards[s1s2.df$sabap==1], by=list(s1s2.df$month.n[s1s2.df$sabap==1]),sum)[,2]
輸出錯誤:
> tibble(s1.no.present)
# A tibble: 12 × 1
s1.no.present
<int>
1 NA
2 NA
3 NA
4 NA
5 NA
6 NA
7 NA
8 NA
9 NA
10 NA
11 NA
12 NA
uj5u.com熱心網友回復:
使用自定義 sum 函式洗掉 NA:
#data
s1s2.df <- read.csv("tmp.csv")
mySum <- function(x){ sum(x, na.rm = TRUE) }
aggregate(s1s2.df$no.present[s1s2.df$sabap == -1 ],
by = list(s1s2.df$month.n[s1s2.df$sabap == -1 ]),
mySum)
# Group.1 x
# 1 1 218
# 2 2 369
# 3 3 590
# 4 4 1471
# 5 5 1880
# 6 6 2241
# 7 7 2306
# 8 8 1827
# 9 9 1377
# 10 10 774
# 11 11 281
# 12 12 280
或使用公式:
aggregate(formula = no.present ~ month.n,
data = s1s2.df[s1s2.df$sabap == -1, ],
FUN = sum)
# month.n no.present
# 1 1 218
# 2 2 369
# 3 3 590
# 4 4 1471
# 5 5 1880
# 6 6 2241
# 7 7 2306
# 8 8 1827
# 9 9 1377
# 10 10 774
# 11 11 281
# 12 12 280
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525496.html
標籤:r数据框总计的
上一篇:ggplot2中的等分布條形圖
下一篇:將函式從r重寫為python
