簡體   English   中英

列子集 dplyr 的條件行和

[英]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_acrossrowwise -

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM