在 R 中,有条件地添加其中一个变量必须为正的值(使用 rowsums)
In R. conditionally adding values where one of the variables has to be positive (using rowsums)
我之前使用以下代码添加一行的值:
subset$EBIT <- rowSums(subset[c("rorresul", "resand", "rteinknc",
"rteinext", "rteinov")], na.rm = TRUE)
但是,我实际上需要包括“resand”只有在它是肯定的情况下才应该包括在内的条件。其他值可以是正数也可以是负数,无关紧要。我使用了 rowSums,否则如果其中一个变量中有缺失值,我的总和就会变成缺失值。
如果您需要数据样本,这里有一些:
rorresul resand rteinknc rteinext rteinov
40 30 2 2 2
50 -40 5 5 5
30 0 1 1 1
非常感谢任何帮助!谢谢!
我只是对所有内容求和,然后在之后减去重沙:
library(dplyr)
df %>%
mutate(
EBIT = rowSums(across(everything())),
EBIT = ifelse(resand < 0, EBIT - resand, EBIT)
)
# rorresul resand rteinknc rteinext rteinov EBIT
# 1 40 30 2 2 2 76
# 2 50 -40 5 5 5 65
# 3 30 0 1 1 1 33
这是数据:
df <- data.frame(
rorresul = c(40, 50, 30),
resand = c(30, -40, 0),
rteinknc = c(2, 5, 1),
rteinext = c(2, 5, 1),
rteinov = c(2, 5, 1),
stringsAsFactors = FALSE
)
编辑
如果您有不应包含在 rowSums 中的变量,那么您可以预先指定这些:
sumVars <- c("rorresul", "resand", "rteinknc", "rteinext", "rteinov")
df %>%
mutate(
EBIT = rowSums(across(all_of(sumVars))),
EBIT = ifelse(resand < 0, EBIT - resand, EBIT)
)
您可以使用pmax
将resand
的负值变为0并计算rowSums
。
cols <- c("rorresul", "resand", "rteinknc", "rteinext", "rteinov")
df$EBIT <- rowSums(transform(df, resand = pmax(resand, 0))[cols])
df
# rorresul resand rteinknc rteinext rteinov EBIT
#1 40 30 2 2 2 76
#2 50 -40 5 5 5 65
#3 30 0 1 1 1 33
我之前使用以下代码添加一行的值:
subset$EBIT <- rowSums(subset[c("rorresul", "resand", "rteinknc",
"rteinext", "rteinov")], na.rm = TRUE)
但是,我实际上需要包括“resand”只有在它是肯定的情况下才应该包括在内的条件。其他值可以是正数也可以是负数,无关紧要。我使用了 rowSums,否则如果其中一个变量中有缺失值,我的总和就会变成缺失值。
如果您需要数据样本,这里有一些:
rorresul resand rteinknc rteinext rteinov
40 30 2 2 2
50 -40 5 5 5
30 0 1 1 1
非常感谢任何帮助!谢谢!
我只是对所有内容求和,然后在之后减去重沙:
library(dplyr)
df %>%
mutate(
EBIT = rowSums(across(everything())),
EBIT = ifelse(resand < 0, EBIT - resand, EBIT)
)
# rorresul resand rteinknc rteinext rteinov EBIT
# 1 40 30 2 2 2 76
# 2 50 -40 5 5 5 65
# 3 30 0 1 1 1 33
这是数据:
df <- data.frame(
rorresul = c(40, 50, 30),
resand = c(30, -40, 0),
rteinknc = c(2, 5, 1),
rteinext = c(2, 5, 1),
rteinov = c(2, 5, 1),
stringsAsFactors = FALSE
)
编辑 如果您有不应包含在 rowSums 中的变量,那么您可以预先指定这些:
sumVars <- c("rorresul", "resand", "rteinknc", "rteinext", "rteinov")
df %>%
mutate(
EBIT = rowSums(across(all_of(sumVars))),
EBIT = ifelse(resand < 0, EBIT - resand, EBIT)
)
您可以使用pmax
将resand
的负值变为0并计算rowSums
。
cols <- c("rorresul", "resand", "rteinknc", "rteinext", "rteinov")
df$EBIT <- rowSums(transform(df, resand = pmax(resand, 0))[cols])
df
# rorresul resand rteinknc rteinext rteinov EBIT
#1 40 30 2 2 2 76
#2 50 -40 5 5 5 65
#3 30 0 1 1 1 33