R基于其他列值的平均值-包括示例代码
我有这样一个数据帧:R基于其他列值的平均值-包括示例代码,r,tidyverse,R,Tidyverse,我有这样一个数据帧: var1 <- c(1,2,0,1) var2 <- c(2,0,3,1) var3 <- c(10,5,10,4) df <- data.frame(var1,var2,var3) var1 var2 6.33 8 说明:对于var2,如果我对大于0的值进行过滤,则VAR3的值为(10、10和4),这些值的平均值为8。(24/3) 所以基本上我是平均每个变量(var1和var2)的var3的值,当它们大于0时 Thx,我们可以使用摘要
var1 <- c(1,2,0,1)
var2 <- c(2,0,3,1)
var3 <- c(10,5,10,4)
df <- data.frame(var1,var2,var3)
var1 var2
6.33 8
说明:对于var2,如果我对大于0的值进行过滤,则VAR3的值为(10、10和4),这些值的平均值为8。(24/3)
所以基本上我是平均每个变量(var1和var2)的var3的值,当它们大于0时
Thx,我们可以使用
摘要
library(dplyr)
df %>%
summarise(var1 = mean(var3[var1 >0]),
var2 = mean(var3[var2 > 0]))
# var1 var2
#1 6.333333 8
或者使用map
在列上循环以filter
,然后在根据条件进行子集设置后获得'var3'的平均值
library(purrr)
df %>%
select(var1:var2) %>%
map_dfc(~ mean(df$var3[.x > 0]))
# var1 var2
#1 6.333333 8
或者使用重塑为“长”格式,然后使用“宽”
library(tidyr)
df %>%
pivot_longer(cols = -var3) %>%
filter(value >0) %>%
group_by(name) %>%
summarise(var3 = mean(var3)) %>%
pivot_wider(names_from = name, values_from = var3)
# A tibble: 1 x 2
# var1 var2
# <dbl> <dbl>
#1 6.33 8
或者另一个选项是将0的值更改为NA
,然后使用colMeans
colMeans(df$var3* NA^(df[1:2] ==0), na.rm = TRUE)
# var1 var2
#6.333333 8.000000
它是否可以推广到var1-var100。这意味着一长串变量。@EGM8686 i添加了4个选项。
colMeans(df$var3* NA^(df[1:2] ==0), na.rm = TRUE)
# var1 var2
#6.333333 8.000000