【问题标题】:Mutate across multiple columns跨多个列突变
【发布时间】:2021-09-05 23:13:22
【问题描述】:

我想重新编码fruit2 和fruit3 列中的值,而不必为每一列写出重新编码函数。

fruit1<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit2<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit3<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
data<-data.frame(fruit1,fruit2,fruit3, stringsAsFactors = FALSE)%>%
  mutate(fruit2=recode(fruit2, Apples="Apple"),
        fruit3=recode(fruit2, Apples="Apple"),             
                       )

我知道您可以使用 cross 动词跨列执行操作,但我无法让它发挥作用。我到目前为止:

data<-data.frame(fruit1,fruit2,fruit3, stringsAsFactors = FALSE)%>%
  mutate(across(c(fruit2,fruit3)),recode(Apples="Apple"))

任何人都可以建议对代码进行任何编辑以使其正常工作吗?

【问题讨论】:

  • 什么是fruit1?
  • 现在就在那里,初始代码错误

标签: r dplyr


【解决方案1】:

像这样?

library(tidyverse)
fruit1<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit2<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
fruit3<-c("Apples","Oranges","Apples","Grapes","Apples","Oranges")
data<-data.frame(fruit1,fruit2,fruit3, stringsAsFactors = FALSE)
data %>%
  mutate(across(c(fruit2, fruit3), ~ recode(.x, Apples="Apple")))
#>    fruit1  fruit2  fruit3
#> 1  Apples   Apple   Apple
#> 2 Oranges Oranges Oranges
#> 3  Apples   Apple   Apple
#> 4  Grapes  Grapes  Grapes
#> 5  Apples   Apple   Apple
#> 6 Oranges Oranges Oranges

【讨论】:

    【解决方案2】:

    你也可以使用replace

    data %>% mutate(across(2:3, ~  replace(., . == 'Apples','Apple')))
       fruit1  fruit2  fruit3
    1  Apples   Apple   Apple
    2 Oranges Oranges Oranges
    3  Apples   Apple   Apple
    4  Grapes  Grapes  Grapes
    5  Apples   Apple   Apple
    6 Oranges Oranges Oranges
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 2021-12-31
      • 2015-08-03
      相关资源
      最近更新 更多