跨行dplyr聚合值

跨行dplyr聚合值,r,dplyr,R,Dplyr,对于下面这样的数据框,需要为每一行跨列聚合(平均值) > df <- data.frame( id = c(1,2), loc=c("loc1", "loc2"), val1=c(10,20), val2=c(190,NA), val3=c(NA, 10) ) > df id loc val1 val2 val3 1 1 loc1 10 190 NA 2 2 loc2 20 NA 10 如何按行计算val1、val2

对于下面这样的数据框,需要为每一行跨列聚合(平均值)

> df <- data.frame(
  id = c(1,2), 
  loc=c("loc1", "loc2"), 
  val1=c(10,20), val2=c(190,NA), val3=c(NA, 10)
)
> df
  id  loc val1  val2  val3
1  1 loc1   10   190    NA
2  2 loc2   20   NA     10
如何按行计算
val1、val2、val3的平均值?所需的输出如下所示

  id  loc vals_mean
1  1 loc1   100
2  2 loc2   15  

你的数据不整齐。首先使用
收集

library(tidyverse)

df %>% 
  gather(key = "key", value = "value", val1, val2, val3) %>% 
  group_by(id, loc) %>% 
  summarize(mean = mean(value, na.rm = T))

#     id    loc  mean
#  <dbl> <fctr> <dbl>
#1     1   loc1   100
#2     2   loc2    15

你的数据不整齐。首先使用
收集

library(tidyverse)

df %>% 
  gather(key = "key", value = "value", val1, val2, val3) %>% 
  group_by(id, loc) %>% 
  summarize(mean = mean(value, na.rm = T))

#     id    loc  mean
#  <dbl> <fctr> <dbl>
#1     1   loc1   100
#2     2   loc2    15

@T-Heron这里有一个例子-你的评论指的是mcve的哪一部分?好的,现在请忽略。@T-Heron,以防你投了反对票?这不是我说的。我总是会立即纠正我的投票错误。@T-Heron这里有一个例子-你的评论指的是
mcve
的哪一部分?好的,现在请忽略。@T-Heron,以防万一你投了反对票?这不是我说的。我总是会立即纠正我的投票错误。为什么使用
tidyverse
而不是
tidyr
?比调用
库(tidyr)更简单;库(dplyr)
为什么使用
tidyverse
而不是
tidyr
?比调用
library(tidyr)更简单;库(dplyr)
df %>% 
  rowwise() %>% 
  mutate(mean = mean(c(val1, val2, val3), na.rm = TRUE))

## A tibble: 2 × 6
#     id    loc  val1  val2  val3  Mean
#  <dbl> <fctr> <dbl> <dbl> <dbl> <dbl>
#1     1   loc1    10   190    NA   100
#2     2   loc2    20    NA    10    15