【问题标题】:Conditionally Replacing Values in a Dataframe Column Based on Values in Another Dataframe Column Using Tidyverse使用 Tidyverse 根据另一个数据框列中的值有条件地替换数据框列中的值
【发布时间】:2017-11-30 05:13:53
【问题描述】:
library(tidyverse)  

Column1<-c("Course1","Course1","Course1","Course2","Course2","Course3","Course3","Course3","    Course4","Course4","Course5","Course5")
Column2<-c("Cat","Dog","Snake","Elephant","Beaver","Rabbit","Fish","Bird","Bear","Horse","Raccoon","Skunk")
Df1<-data.frame(Column1,Column2)

使用上面的示例数据,我想根据“Column2”的值有条件地替换/重新编码“Column1”的值。

对于这个简单的示例,如果“Column2”包含“Cat”或“Dog”,则“Column1”值应替换为“Course6”。

到目前为止,我已经尝试了下面的代码。它不起作用,但我觉得我很接近。我也更喜欢 tidyverse 解决方案。

map2(Df1[2],Df1[1],~if_else(.x =="Cat"|"Dog", replace(.y, "Course6")))

map2(Df1[2],Df1[1],~if_else(.x =="Cat"|"Dog", replace(.y, .x,"Course6")))

我们将不胜感激。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    不知道我是否正确,但也许这对你有用:

    df1[df1$Column2 == c("Cat", "Dog"), 1] <- "Course6"
    

    创建数据框时,您必须关闭 stringsAsFactors 或提供完整的因素列表。

    编辑

    多一点tidyverse:

    df1 %>%
      spread(key = Column2, value = Column1) %>%
      mutate("Dog" = "Course6") %>%
      gather(key = "Column1", value = "Column2")
    

    【讨论】:

    • 如何在管道中使用 dplyr 编写这种 tidyverse 风格?
    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 2019-09-02
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多