我正在将Stata代码转换为R。有一段代码创建了一个新变量,并在满足特定参数时添加列值。例如,如果单元格大于0且小于或等于3,则该值将添加到newvar第一个
newvar
所需输出
kmb7vmvb1#
tidyverse方法
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
oyxsuwqo2#
将不满足条件的元素替换为NA,并获取其余元素上的rowSums以创建“newvar”
NA
rowSums
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
w41d8nur3#
执行行操作的常用方法是使用apply函数。例如:
apply
dat$newvar <- apply(dat, 1, \(r) sum(r[r > 0 & r <= 3]))
读作:对dat的每一行应用一个函数。该函数取一个向量r,并对r中满足条件的元素求和。结果
dat
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
3条答案
按热度按时间kmb7vmvb1#
tidyverse
方法oyxsuwqo2#
将不满足条件的元素替换为
NA
,并获取其余元素上的rowSums
以创建“newvar”w41d8nur3#
执行行操作的常用方法是使用
apply
函数。例如:读作:对
dat
的每一行应用一个函数。该函数取一个向量r
,并对r
中满足条件的元素求和。结果