For循环返回NA:仅返回ifelse语句的第一个匹配项

史蒂夫·齐苏

如何使我的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但是,我可能错了,也许这不是我的问题。

本杰明

首先,使用apply获取第一个2的列索引。
其次,获取与该索引对应的名称

first2 <- apply(df, MARGIN = 1, FUN = function(x) head(which(x == 2), 1))
df$newvar <- 
  vapply(first2, 
         FUN = function(x) if (length(x)) names(df)[x] else NA_character_, 
         character(1))

for循环相当于将

df$newvar <- NA
for (i in seq_len(nrow(df))){
  first2 <- head(which(df[i, ] == 2), 1)
  df$newvar[i] <- if (length(first2)) names(df)[first2] else NA
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

HtmlAgilityPack仅返回第一个匹配项

全球匹配仅返回第一个匹配

正则表达式执行仅返回第一个匹配项

为什么Apache Hive XPath仅返回第一个匹配项?

Ruby str.match(regex)返回仅包含第一个匹配项的MatchData

PHP preg_match仅返回第一个匹配项

GWT中的RegExp和MatchResult仅返回第一个匹配项

Python re.findall仅返回第一个匹配项

使用If语句的For循环仅返回第一个元素

Foreach循环仅返回第一个结果

PyQuery-attr match仅返回第一个匹配项,而不是所有匹配项

仅当存在匹配项时才返回true,但不是第一个匹配项

SQL IN子句仅返回ID以逗号分隔的列表中具有第一个匹配项的行

别名选择器不起作用的SQL IN运算符仅返回第一个匹配项

C#中的正则表达式仅返回第一个匹配项

dplyr 中的 gsub mutate ifelse 语句返回第一个项目而不是选定的项目

C#尝试返回列表中重复项的索引,但是循环不断返回仅第一个重复项的索引

NSPredicate仅查找第一个匹配项

仅删除sed的第一个匹配项

仅打印第一个匹配项

HTML 仅替换第一个匹配项

python循环request.get()仅返回第一个循环

比较两个对象,仅返回第一个对象的匹配值

Powershell:多个 Select-Object 语句仅返回第一个出现的结果

python if else语句仅返回第一个条件

在Kotlin的嵌套列表中查找并返回第一个匹配项?

按字段值返回第一个匹配项的数组

pcregrep如何强制返回正则表达式的第一个匹配项

在找到第一个匹配项后使 MySQL 查询返回/停止执行