我对R非常陌生。我有一个名为RWA2010LONG
的表,包含65个变量。我希望根据以下条件从表RWA2010LONG
的30:49变量和同一表的另一个变量(BIRTH
)中创建一个名为BIRTH
的新变量:对于每一行,如果表RWA2010LONG
的变量30:49的值之一等于变量BIRTH
的值,则NEWVAR
取值1
。否则,NEWVAR
将得到0
值--这是我试图做的:
RWA2010LONG$ NEWVAR <- for (i in colnames(RWA2010LONG[30:49])){ifelse(i==RWA2010LONG$BIRTH, 1,0)}
发布于 2022-04-27 13:45:00
这是一种方法。由于您没有提供数据,所以我正在编写一些示例数据,并检查列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
指示按行应用条件,如果为了将来的引用,它将按列检查条件),如果满足条件,则返回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
发布于 2022-04-27 15:02:21
带有if_any
的选项
library(dplyr)
df <- df %>%
mutate(newvar = +(if_any(5:10, ~ .x == BIRTH)))
https://stackoverflow.com/questions/72029697
复制相似问题