R 动态选择列并汇总数据

R 动态选择列并汇总数据,r,dataframe,dplyr,tidyverse,R,Dataframe,Dplyr,Tidyverse,我有以下数据框 ID <- c(1,1,2,3,4,5,6) Value1 <- c(20,50,30,10,15,10,NA) Value2 <- c(40,33,84,NA,20,1,NA) Value3 <- 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,Value1,Va

我有以下数据框

ID <- c(1,1,2,3,4,5,6)
Value1 <- c(20,50,30,10,15,10,NA)
Value2 <- c(40,33,84,NA,20,1,NA)
Value3 <- 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,Value1,Value2,Value3,Grade1,Grade2)

  ID Value1 Value2 Value3 Grade1 Grade2
1  1     20     40     60     20     40
2  1     50     33     40     50     33
3  2     30     84     60     30     84
4  3     10     NA     10     10     NA
5  4     15     20     25     15     20
6  5     10      1     NA     10      1
7  6     NA     NA     NA     NA     NA
为了解决这个问题,我编写了以下代码

Library(tidyverse)    
DF %>% group_by (ID) %>% select(contains("Value")) %>% summarise(mean(.,na.rm = TRUE))
代码按ID对数据进行分组,选择列名包含值的列,并尝试使用平均值函数对所选列进行汇总。当我运行代码时,我得到以下输出

> DF %>% group_by (ID) %>% select(contains("Value")) %>% summarise(mean(.))
Adding missing grouping variables: `ID`
# A tibble: 6 x 2
     ID `mean(.)`
  <dbl>     <dbl>
1     1        NA
2     2        NA
3     3        NA
4     4        NA
5     5        NA
6     6        NA
我将感谢你以这种方式提供的帮助

您应该尝试使用pivot\u longer将您的数据从宽到长格式读取pivot\u longer和pivot\u wide上的最新tidyR更新

此处输出

   ID  mean
  <dbl> <dbl>
1     1  41  
2     2  58  
3     3  10  
4     4  20  
5     5  5.5
6     6 NaN  

在不使用dplyr或任何特定软件包的情况下,这将有助于:

DF$mean<- rowMeans(DF[,c(2:4)], na.rm = T)

请解释一下为什么要使用透视函数?是否可以通过分组来解决此问题?我使用了分组,但在数据透视之后,因为您的数据格式较宽。要对数据进行分组,我们需要长格式的数据。请阅读本文了解宽数据与长数据,了解您的解决方案假定列的索引是静态的。我希望通过使用列名搜索来避免此问题。如果ID始终存在,则可以使用:DF$avg%select ID,na.rm=T
   ID  mean
  <dbl> <dbl>
1     1  41  
2     2  58  
3     3  10  
4     4  20  
5     5  5.5
6     6 NaN  
DF$mean<- rowMeans(DF[,c(2:4)], na.rm = T)