【发布时间】:2018-01-23 14:25:21
【问题描述】:
如何让我的 for 循环只返回 ifelse 语句的第一个匹配项?
这是我的数据框:
df <- structure(
list(
x0 = c("0", "0", "0", "0", "0", "0", "0", "0",
"0", "0"),
x1 = c("0", "0", "0", "0", "0", "0", "0", "0", "0",
"0"),
x2 = c("0", "0", "0", "0", "0", "0", "0", "0", "0", "0"),
x3 = c("0", "0", "0", "0", "1", "0", "0", "0", "0", "0"),
x4 = c("0", "0", "0", "0", NA, "0", "0", "0", NA, "0"),
x5 = c("0",
"0", "0", "0", NA, "0", "0", "0", NA, "0"),
x6 = c("0", "0",
"0", "0", NA, "0", "0", "0", NA, "0"),
x7 = c("0", "0", "0",
"0", NA, "0", "0", "0", NA, "0"),
x8 = c("0", "0", "0", "0",
NA, "0", "0", "0", NA, "0"),
x9 = c("0", "0", "0", "0", NA,
"0", "0", "0", NA, "1"),
x10 = c("0", "0", "0", "0", NA,
"0", "0", "1", NA, "1"),
x11 = c("0", "0", "0", "0", NA,
"0", "0", "1", NA, "2"),
x12 = c("0", "0", "0", "0", NA,
"0", "0", "0", NA, "2"),
x13 = c("0", "0", "0", "0", NA,
"0", "0", "1", NA, "3"),
x14 = c(NA, NA, "0", "0", NA, NA,
NA, "2", NA, NA),
x15 = c(
NA_character_,
NA_character_,
NA_character_,
NA_character_,
NA_character_,
NA_character_,
NA_character_,
NA_character_,
NA_character_,
NA_character_
)
),
.Names = c(
"x0",
"x1",
"x2",
"x3",
"x4",
"x5",
"x6",
"x7",
"x8",
"x9",
"x10",
"x11",
"x12",
"x13",
"x14",
"x15"
),
row.names = c(NA, 10L),
class = "data.frame"
)
这是我想要实现的预期输出:
df$expectedoutput <- c(NA, NA, NA, NA, NA, NA, NA, 'x14', NA, 'x11')
这是我获得上述输出的尝试:
df$newvar <- NA
for (i in 1:16) {
df$newvar <- ifelse(df[,i] == "2" & is.na(df$newvar),
colnames(df[i]), NA)
}
我相信我的问题是我创建的 for 循环一直持续到最后并覆盖了发生的第一个匹配项,例如对于第 10 行,而不是完成 df[10,12] 的列名,循环继续到 df[10,16],因此返回 NA 但是,我可能是错的,也许这不是我的问题。
【问题讨论】:
-
每次循环都在重写
df$newvar,循环结束时只有最后一个存在。 -
是的,我知道@RuiBarradas 这是我要求解决的问题...
标签: r loops if-statement