尝试找到按行索引dplyr
和mutate
的 tibble
规范方法。
我经历了许多SO问题和GH问题,例如row_number
,if_else
,case_when
之类的功能,但是仍然不清楚什么是实现以下目标的正确方法。
最小示例:拥有一个data.frame,我想通过提供行索引(这里是第2和第4行)来将它的其中一列更新为特定行的特定值(这里是NA
)。要更新的列不必参数化。在基数R以下实现以下目标。
DF = data.frame(x=5:1)
idx = c(2L, 4L)
DF[idx, "x"] = NA_integer_
DF
# x
#1 5
#2 NA
#3 3
#4 NA
#5 1
答案 0 :(得分:0)
根据@camille反馈并得到其他评论者的同意,最整洁的代码是mutate(x = ifelse(row_number() %in% idx, NA_integer_, x))
。
顺便说一句。最好使用<-
代替=
分配,并避免在对象名称中使用大写字母。有关更多信息,请参见The tidyverse style guide
完整的代码:
library(dplyr)
df <- data.frame(x = 5:1)
idx <- c(2L, 4L)
df %>% mutate(x = ifelse(row_number() %in% idx, NA_integer_, x))
# x
#1 5
#2 NA
#3 3
#4 NA
#5 1