首页 > 解决方案 > dplyr:根据一个变量中的值逐行替换值

问题描述

我想将年龄过大(年龄 >90)的参与者排除在分析之外。通常我会这样做:

df <- data.frame(age=c(1,10, 100), x= 1:3, y= 1:3)
df[df$age > 90, ] <- NA

我不知道如何用 dplyr 做到这一点。如果我们想替换一个变量,我们可以使用

library(dplyr)
df <- data.frame(age=c(1,10, 100), x= 1:3, y= 1:3)
df %>%
  mutate(age= replace(age, age> 90, NA))

所以我想我可以使用

df %>%
  mutate_all(function(i) replace(i, age> 90, NA))

我也尝试过mutate_ifmutate_at但没有成功。在阅读了关于 SO 的问题后,我认为“问题”是在我的情况下,我需要使用 dplyr 逐行更改

标签: rdplyrconditional-statements

解决方案


您需要以使测试列 ( age) 位于最后的方式排列列。

library(dplyr)
df %>%
  select(x, y, age) %>%
  mutate_all(~replace(.x, age> 90, NA))

#   x  y age
#1  1  1   1
#2  2  2  10
#3 NA NA  NA

推荐阅读