如何在R中实现Stata的条件列求和逻辑?
实现Stata逻辑的R代码
首先加载示例数据集:
set.seed(5) dat <- data.frame(a = rnorm(5), b = rnorm(5), c = rnorm(5))
方法1:Base R(与Stata逻辑完全对应)
模仿Stata的循环思路,先初始化newvar为0,再遍历指定列累加符合条件的值:
# 初始化newvar为0 dat$newvar <- 0 # 指定需要处理的列名 target_cols <- c("a", "b", "c") # 遍历每一列执行累加逻辑 for (col in target_cols) { # 提取当前列中满足0 < 值 ≤3的数值,其余替换为0 valid_values <- ifelse(dat[[col]] > 0 & dat[[col]] <= 3, dat[[col]], 0) # 累加到newvar dat$newvar <- dat$newvar + valid_values }
方法2:dplyr向量化操作(简洁高效)
用dplyr的行求和结合条件替换,适合大数据量场景:
library(dplyr) dat <- dat %>% mutate( newvar = rowSums(across(c(a, b, c), ~ ifelse(.x > 0 & .x <= 3, .x, 0))) )
验证结果
两种方法输出一致,示例数据集运行后的结果如下:
print(dat) # a b c newvar # 1 0.0735648 -0.7092008 -0.4721663 0.0735648 # 2 -0.2968686 -0.1194526 0.0898862 0.0898862 # 3 0.4146414 0.2522234 -0.0881194 0.6668648 # 4 0.7019072 -0.2857736 0.0332207 0.7351279 # 5 -0.4721663 0.1895193 -0.7262144 0.1895193
内容的提问来源于stack exchange,提问作者Marrrrie
相关产品推荐
相关产品推荐

