用 mutate 函数替换条件下的值

Posted

技术标签:

【中文标题】用 mutate 函数替换条件下的值【英文标题】:replace values under condition with mutate function 【发布时间】:2021-07-18 03:38:13 【问题描述】:

我正在尝试在数据帧上运行一个简单的 mutate() 函数,以在其他列的条件下对一列的 replace 值。 大约一周后出现的问题是 mutate 函数除了我试图替换的第一个值之外没有任何改变。 没有错误消息,代码照常运行,但生成的数据框的值没有改变。 由于我与mutate() 合作多年,我真的不知道出了什么问题。

有没有其他人有同样的问题或知道如何解决这个问题?

library(plyr)
library(dplyr)

df <- data.frame(var1 = rep(c(1:10),2),
                 var2 = rep(c(0,1), 10),
                 var3 = rep(c("2010", "2015", "2020", "2025"),5),
                 stringsAsFactors = FALSE)

df1 <- df %>% 
        mutate(var1 = replace(var1, var2 == "1" & var3 == "2015", "20"),
               var1 = replace(var1, var2 == "0" & var3 == "2020", "0))

现在它不会以我想要的 var1 值返回 df1,而只会复制 df,因此 var1 保持不变。

谢谢!

【问题讨论】:

1) plyr 已退休,您可以单独使用 dplyr 完成大部分事情(所有事情)。此外,加载plyr 可能会与dplyr 中的某些功能冲突(如summarise/mutate)。 2) 您的第二个 replace 声明中缺少 "。纠正这个问题能解决问题吗? 感谢您的回答!我只跑了dplyr 并且它起作用了。当我同时加载dplyrplyr 时,问题似乎出现了。我想我在同一个 R 会话中使用了 plyr 包进行另一个操作,这导致了错误。我会为此提出,从现在开始只使用dplyr 【参考方案1】:

这会产生您想要的输出吗?您的问题并不清楚,我没有足够的声誉点来发表评论。

df <- data.frame(var1 = rep(c(1:10),2),
                 var2 = rep(c(0,1), 10),
                 var3 = rep(c("2010", "2015", "2020", "2025"),5),
                 stringsAsFactors = FALSE)

df1 <- df %>% 
  mutate(var1 = replace(var1, var2 == "1" & var3 == "2015", "20")) %>%
  mutate(var1 = replace(var1, var2 == "0" & var3 == "2020", "0"))

head(df1)

#    var1 var2 var3
# 1    1    0 2010
# 2   20    1 2015
# 3    0    0 2020
# 4    4    1 2025
# 5    5    0 2010
# 6   20    1 2015


【讨论】:

感谢您的回答!我刚刚通过上面的方案解决了问题!

以上是关于用 mutate 函数替换条件下的值的主要内容,如果未能解决你的问题,请参考以下文章

tidyverse 和 dplyr:根据其他列有条件地替换列中的值

用 D 列中的值有条件地替换 A、B、C 列中的值

LABVIEW如何实现数组多次条件判断,并且替换数组中的值

使用 dplyr 有条件地替换列中的值

使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值

PostgreSQL 正则表达式用条件替换函数