[英]R AVERAGE IF based on other Column value - Example code included
我有一個這樣的數據框:
var1 <- c(1,2,0,1)
var2 <- c(2,0,3,1)
var3 <- c(10,5,10,4)
df <- data.frame(var1,var2,var3)
所以,我想要的是根據每個 var 的值對列 var3 值“求平均值”,所以我最終得到了這樣的 df:
var1 var2
6.33 8
說明:對於 var2,如果我過濾大於 0 的值,var 3 的值是 (10,10 和 4),它們的平均值是 8。(24/3)
所以基本上我是在每個 var(var1 和 var2)大於 0 時平均 var3 的值。
謝謝,
我們可以單獨使用summarise
來做到這一點
library(dplyr)
df %>%
summarise(var1 = mean(var3[var1 >0]),
var2 = mean(var3[var2 > 0]))
# var1 var2
#1 6.333333 8
或使用map
循環遍歷列進行filter
,然后根據條件進行子集化后獲取 'var3' 的mean
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
或者在base R
sapply(df[1:2], function(x) mean(df$var3[x > 0]))
# var1 var2
#6.333333 8.000000
或者另一種選擇是將 0 的值更改為NA
,然后使用colMeans
colMeans(df$var3* NA^(df[1:2] ==0), na.rm = TRUE)
# var1 var2
#6.333333 8.000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.