在R中使用ifelse条件从多个变量的条件创建一个新变量



我对R真的很陌生。我有一个名为RWA2010LONG的表,其中包含65个变量。我想从表RWA2010LONG的30:49变量和基于以下条件的同一表的另一个变量(BIRTH)创建一个名为NEWVAR的新变量:对于每一行,如果表RWA2010LONG的变量30:49的一个值等于变量BIRTH的值,则NEWVAR取值1。否则,"NEWVAR"取"0"这是我尝试做的:

RWA2010LONG$ NEWVAR <- for (i in colnames(RWA2010LONG[30:49])){ifelse(i==RWA2010LONG$BIRTH, 1,0)}

这是一个方法。由于您没有提供数据,我正在制作一些示例数据并检查第5至10列中的任何值是否与BIRTH相同:

#Example data
df <- data.frame(matrix(rnbinom(100, mu = 5, size = 0.5), ncol = 10,
dimnames = list(c(sprintf("obs_%s", 1:10)),
c("BIRTH",sprintf("col_%s", 2:10)))))
df$newvar <- apply(df[,5:10] == df$BIRTH, 1, any)*1

apply语句按行检查条件df[,5:10] == df$BIRTH(1表示按行应用条件,如果供将来参考,如果输入2,则按列检查条件),如果条件满足,则返回TRUEFALSE*1将这些逻辑转换为数值。

输出:

#            BIRTH col_2 col_3 col_4 col_5 col_6 col_7 col_8 col_9 col_10  newvar
# obs_1      0     3     4     0     6    18     0    10     5      7      1
# obs_2      5     1     0     7     5     0     2     2     2      3      1
# obs_3      1     2     4     2     1    13    14     1     2      8      1
# obs_4      1     0     0     0    11     0     0     0    15      0      0
# obs_5      1     9     1     0     4    27     2     1     0      0      1
# obs_6      5     1     0     2     0     7     2     4     0      0      0
# obs_7      1     0     0     6     0     0     1     5     0      0      1
# obs_8     44     0    15     1     1     0     1     1     0      6      0
# obs_9      6     6     0     0     0     4    17     0     6      1      1
# obs_10     0     2     0     0     2    11     2     1     9      2      0

if_any的选项

library(dplyr)
df <- df %>%
mutate(newvar = +(if_any(5:10, ~ .x == BIRTH)))

最新更新