dplyr按行索引突变

时间:2019-05-30 15:01:55

标签: r dataframe dplyr

尝试找到按行索引dplyrmutate tibble规范方法。
我经历了许多SO问题和GH问题,例如row_numberif_elsecase_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

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