对R中的列进行条件求和

3zwjbxry  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(219)

我正在将Stata代码转换为R。有一段代码创建了一个新变量,并在满足特定参数时添加列值。例如,如果单元格大于0且小于或等于3,则该值将添加到newvar
第一个

所需输出

kmb7vmvb

kmb7vmvb1#

tidyverse方法

library(dplyr)
set.seed(5)
dat <- data.frame(a = rnorm(5), b = rnorm(5), c = rnorm(5))

conditional_sum <- function(x,a = 0,b = 3){
  sum(x[x > a & x <= b],na.rm = TRUE)
}

dat %>% 
  rowwise() %>% 
  mutate(newvar = conditional_sum(c_across()))

# A tibble: 5 x 4
# Rowwise: 
        a      b      c newvar
    <dbl>  <dbl>  <dbl>  <dbl>
1 -0.841  -0.603  1.23  1.23  
2  1.38   -0.472 -0.802 1.38  
3 -1.26   -0.635 -1.08  0     
4  0.0701 -0.286 -0.158 0.0701
5  1.71    0.138 -1.07  1.85
oyxsuwqo

oyxsuwqo2#

将不满足条件的元素替换为NA,并获取其余元素上的rowSums以创建“newvar”

dat$newvar <-  rowSums(NA^(dat <=0|dat >=3)*dat, na.rm = TRUE)
  • 输出
> dat
            a          b          c     newvar
1 -0.84085548 -0.6029080  1.2276303 1.22763034
2  1.38435934 -0.4721664 -0.8017795 1.38435934
3 -1.25549186 -0.6353713 -1.0803926 0.00000000
4  0.07014277 -0.2857736 -0.1575344 0.07014277
5  1.71144087  0.1381082 -1.0717600 1.84954910
w41d8nur

w41d8nur3#

执行行操作的常用方法是使用apply函数。例如:

dat$newvar <- apply(dat, 1, \(r) sum(r[r > 0 & r <= 3]))

读作:对dat的每一行应用一个函数。该函数取一个向量r,并对r中满足条件的元素求和。
结果

a          b          c     newvar
1 -0.84085548 -0.6029080  1.2276303 1.22763034
2  1.38435934 -0.4721664 -0.8017795 1.38435934
3 -1.25549186 -0.6353713 -1.0803926 0.00000000
4  0.07014277 -0.2857736 -0.1575344 0.07014277
5  1.71144087  0.1381082 -1.0717600 1.84954910

相关问题