2017-10-09 137 views
0

我想計算我數據框中幾列的平均值。我想使用dplyr包中的':'來選擇它們。變量名稱是:Mcheck5_1_1,Mcheck5_2_1,...,Mcheck5_8_1(所以共有8個)。我瞭解到,我可以dplyr的刪除函數?計算R中數據幀中幾列的平均值

select(df, Mcheck5_1_1:Mcheck5_8_1) 

在4min33sec由Roger龐(https://www.youtube.com/watch?v=aywFompr1F4&feature=youtu.be)講授的在線課程選擇。

然而,R抱怨:

Error in select(df, Mcheck5_1_1:Mcheck5_8_1) : 
unused argument (Mcheck5_1_1:Mcheck5_8_1) 

我也找不到使用這個別人的「:」在谷歌的功能。我懷疑這個功能不再存在?

現在,我使用下面的代碼來解決這個問題:

idx = grep("Mcheck5_1_1", names(df)) 
df$avg = rowMeans(df[, idx:idx+7], na.rm = TRUE) 

(我毫不猶豫地使用索引號(例如,DF這些列[138]),因爲擔心其積極可能會有所不同)

但是,我認爲這個解決方案不夠優雅。你會建議我有沒有其他方法可以做到這一點?現在是否仍然可以使用冒號(:)方法爲我的變量編制索引,這只是我在代碼中犯了一些錯誤?謝謝大家。

https://www.youtube.com/watch?v=aywFompr1F4&feature=youtu.be

(在4:33)

回答

1

嘗試dplyr::select(df, Mcheck5_1_1:Mcheck5_8_1)。這可能是一攬子衝突。有關相關問題,請參見here

計算平均爲每個列:

library(magrittr) 
library(purrr) 
df %>% 
dplyr::select(Mcheck5_1_1:Mcheck5_8_1) %>% 
map(mean) 
+0

順便說一句,因爲dplyr現在從軟件包magrittr中導入了%>%,所以您可能需要使用它。欲瞭解更多信息,請參閱https://stackoverflow.com/questions/23621209/differences-between-dplyr-and-magrittr – JetLag

0

也許使用contains可以幫助,因爲它是用來執行在列的名稱搜索,所以在你的情況將是:select(df, contains("Mcheck5_"))

+0

你的回答也幫了不少忙。謝謝! – JetLag