用 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
并且它起作用了。当我同时加载dplyr
和plyr
时,问题似乎出现了。我想我在同一个 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:根据其他列有条件地替换列中的值