【发布时间】:2019-09-17 05:08:05
【问题描述】:
我有以下数据框
library(tidyverse)
ID <- c('A','A','B','C','D','E','F')
Level1 <- c(20,50,30,10,15,10,NA)
Level2 <- c(40,33,84,NA,20,1,NA)
Level3 <- c(60,40,60,10,25,NA,NA)
Grade1 <- c(20,50,30,10,15,10,NA)
Grade2 <- c(40,33,84,NA,20,1,NA)
DF <- data.frame(ID,Level1,Level2,Level3,Grade1,Grade2)
ID Level1 Level2 Level3 Grade1 Grade2
1 A 20 40 60 20 40
2 A 50 33 40 50 33
3 B 30 84 60 30 84
4 C 10 NA 10 10 NA
5 D 15 20 25 15 20
6 E 10 1 NA 10 1
7 F NA NA NA NA NA
我的目标是按 ID 对数据进行分组,通过计算平均值来汇总列名包含字符串“级别”的列。理想情况下,输出应该是这样的
ID mean (Level1+Level2+Level3)
A 40.5
B 58
C 10
....
这是我的代码
DF %>%
group_by(ID) %>%
select(starts_with('Level')) %>%
summarise(mean(.,na.rm = TRUE))
当我运行代码时,我得到以下输出
Adding missing grouping variables: `ID`
# A tibble: 6 x 2
ID `mean(., na.rm = TRUE)`
<fct> <dbl>
1 A NA
2 B NA
3 C NA
4 D NA
5 E NA
6 F NA
Warning messages:
1: In mean.default(., na.rm = TRUE) :
argument is not numeric or logical: returning NA
2: In mean.default(., na.rm = TRUE) :
argument is not numeric or logical: returning NA
3: In mean.default(., na.rm = TRUE) :
argument is not numeric or logical: returning NA
4: In mean.default(., na.rm = TRUE) :
argument is not numeric or logical: returning NA
5: In mean.default(., na.rm = TRUE) :
argument is not numeric or logical: returning NA
6: In mean.default(., na.rm = TRUE) :
argument is not numeric or logical: returning NA
云请帮我理解我的代码有什么问题。对于建议的解决方案 1) 应通过使用 dplyr 中的starts_with() 或 contains() 等函数将列名与字符串匹配来选择列。 2)如果可能的话,我还想避免旋转或收集功能。
感谢您的帮助
【问题讨论】:
-
你想如何处理na值?
-
理想情况下,na.rm = TRUE(如果可能)