也許這可以幫助:
df <- data.frame(group=c("a","b","c","a","b","c","a","b","c"),
var1=1:9, var2=c(1,2,3,NA,5,6,7,8,9))
with(df, length(cbind(var1, var2)))
> with(df, length(cbind(var1, var2)))
[1] 18
length()
對待cbind(var1, var2)
作爲基質,它僅僅是一個維度矢量,所以你會得到報告prod(nrow(mat), ncol(mat))
長度,其中mat
是生成的矩陣。
理想情況下,你會使用nrow()
代替length()
,但也許更廣泛應用的是NROW()
功能,這將治療載體爲1列的矩陣評估功能的目的。 nrow()
不會爲一個矢量輸入
> nrow(1:10)
NULL
例如工作請嘗試以下:
aggregate(cbind(var1,var2) ~ group, df, NROW)
aggregate(var1 ~ group, df, NROW)
> aggregate(cbind(var1,var2) ~ group, df, NROW)
group var1 var2
1 a 2 2
2 b 3 3
3 c 3 3
> aggregate(var1 ~ group, df, NROW)
group var1
1 a 3
2 b 3
3 c 3
和你有NA
,你可能不希望刪除不完整的情況下,這將在默認情況下發生的。
aggregate(cbind(var1,var2) ~ group, df, NROW, na.action = na.pass)
> aggregate(cbind(var1,var2) ~ group, df, NROW, na.action = na.pass)
group var1 var2
1 a 3 3
2 b 3 3
3 c 3 3
的問題是,在建立數據幀傳遞給aggregate.data.frame
,通常的模型:這是上述和因此爲什麼行爲組a
數爲2對於添加na.action = na.pass
到呼叫看出幀生成過程發生,並且aggregate.formula
默認將na.action
參數設置爲na.omit
- 這是使用公式接口進行建模函數的標準行爲。
如果你要計算每個變量非NA
值的數量,那麼你需要一個完全不同的方法,可能使用is.na()
,在
foo <- function(x) sum(!is.na(x))
aggregate(cbind(var1,var2) ~ group, df, foo, na.action = na.pass)
> aggregate(cbind(var1,var2) ~ group, df, foo, na.action = na.pass)
group var1 var2
1 a 3 2
2 b 3 3
3 c 3 3
其中通過計算非NA
價值的作品數量通過TRUE
→FALSE
經由!
的強制,然後將得到的TRUE
轉換爲1
和FALSE
s至0
,然後sum()
然後爲我們添加。
嗨加文!感謝您的解釋。我不希望納入我的計數或我的任何其他功能(最小,最大,平均等)的NA。我看到'foo'有效,但不明白你爲什麼使用'sum'。這不應該加起來所有的非NAs? – CJO
對不起,我剛剛在代碼下方看到了你的文字。好吧,我明白這是如何工作的。不過,我也希望使用cbind或點符號的聚合來將其他函數應用到我的分組中(例如min,max,mean,sd)。只需添加na.action = na.pass即可。有什麼建議?順便說一句...這是你在Mac上給你的課程中的克萊爾! – CJO
@CJO嗨克萊爾!你列出的這些函數都有一個'na.rm'參數,它將在執行計算而不是返回'NA'的同時忽略任何'NA'。您通過'...'參數將其他參數傳遞給函數。因此'聚集(cbind(var1,var2)〜group,df,mean,na.action = na.pass,na.rm = TRUE)'會起作用。只需將'mean'切換出來,並替換您提到的其他功能即可。 –