我的問題有點簡單,但我沒有找到正確的解決方案。得到一個這樣的資料框:
ID name var1 var2 var3
1 a 1 -1 2
2 b 2 3 2
3 c 1 -1 -1
我需要得到var_total變數中每個大于零的數字從 var1 到 var3 的總和,如下所示:
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,但我不確定這是否是正確的方法,以及是否有簡單的方法來取回原始數字。
謝謝!
uj5u.com熱心網友回復:
使用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
uj5u.com熱心網友回復:
這是一個基礎 R 單線,
rowSums(replace(df, df < 0, 0)[-c(1, 2)])
#[1] 3 7 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409482.html
標籤:
上一篇:熊貓分組資料框直到特定值
