[英]Conditional rowwise sum of subset of columns dplyr
我的問題有點簡單,但我沒有找到正確的解決方案。 得到一個 dataframe 像這樣:
ID name var1 var2 var3
1 a 1 -1 2
2 b 2 3 2
3 c 1 -1 -1
我需要從 var1 到 var3 獲取var_total
變量中大於零的每個數字的總和,如下所示:
ID name var1 var2 var3 var_total
1 a 1 -1 2 3
2 b 2 3 2 7
3 c 1 -1 -1 1
我設法得到了無條件的總和,如下所示:
df %>% rowwise %>% mutate(var_total = sum(c_across(starts_with('var'))))
我知道有na.rm
選項,所以我想我可能可以暫時將負值轉換為 NA,但我不確定這是否是正確的方法,以及是否有一種簡單的方法可以取回原始數字。
謝謝!
使用c_across
和rowwise
-
library(dplyr)
df %>%
rowwise() %>%
mutate(var_total = {
x <- c_across(starts_with('var'))
sum(x[x > 0])
})
但是向量化的基礎 R 選項將是 -
cols <- grep('var', names(df))
df$var_total <- rowSums(df[cols] * +(df[cols] > 0))
df
# ID name var1 var2 var3 var_total
#1 1 a 1 -1 2 3
#2 2 b 2 3 2 7
#3 3 c 1 -1 -1 1
這是一個基本的 R 單線,
rowSums(replace(df, df < 0, 0)[-c(1, 2)])
#[1] 3 7 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.