我对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
,则按列检查条件),如果条件满足,则返回TRUE
或FALSE
。*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)))