【问题标题】:Replace values across multiple varibles in R替换 R 中多个变量的值
【发布时间】:2020-03-05 12:24:59
【问题描述】:

我有一个包含 82 个变量的数据框。许多变量包含字母,我想将其更改为一组数字。我可以使用下面的代码逐列、逐个数字地执行此操作:

 library(tibble)
 mydf <- tribble(~Var1, ~Var2.a, ~Var3.a, ~Var4.a,
            "A", "b", "b", "d",
            "B", "w", NA, "w",
            "C", "g", "k", "b",
            "D", "k", NA, "j")

 newdf <- mydf %>%
   mutate(Var2.a = ifelse(Var2.a %in% c("m", "p", "w", "h", "n"), 1, Var2.a),           
          Var2.a = ifelse(Var2.a %in% c("k", "b", "g", "j", "f", "d"), 2, Var2.a),
          Var3.a = ifelse(Var3.a %in% c("m", "p", "w", "h", "n"), 1, Var3.a),           
          Var3.a = ifelse(Var3.a %in% c("k", "b", "g", "j", "f", "d"), 2, Var3.a),
          Var4.a = ifelse(Var4.a %in% c("m", "p", "w", "h", "n"), 1, Var4.a),           
          Var4.a = ifelse(Var4.a %in% c("k", "b", "g", "j", "f", "d"), 2, Var4.a))

但是对于我需要更改的 70 多列,这将花费大量时间!

所有感兴趣的变量在变量名中都有一个匹配的字母组合(示例数据中的“.a”),所以我应该能够使用contains() 在这些列上使用ifelse 语句。但是我不知道该怎么做!

我查看了this answer,我认为这让我很接近,但我不知道如何在其中嵌入 if 语句:

 newdf <- mydf %>%
   mutate_at(vars[2:4] = ifelse(vars %in% c("m", "p", "w", "h", "n"), 1, vars)

但我收到错误 Error in vars[2:4] : object of type 'closure' is not subsettable。我认为这里的括号是错误的,可能还有vars的使用!

【问题讨论】:

  • 这接近于回答我的问题,但我不确定如何处理的一件事是将其放在 ifelse 声明中。我会修改我的答案 - 谢谢!

标签: r if-statement dplyr


【解决方案1】:

试试这个例子:

# custom function, I prefer case_when (we could use nested if_else if needed.)
foo <- function(x){
  case_when(
    x %in%  c("m", "p", "w", "h", "n") ~ 1L,
    x %in%  c("k", "b", "g", "j", "f", "d") ~ 2L,
    TRUE ~ NA_integer_)
}

mydf %>% 
  mutate_at(vars(Var2.a:Var4.a), foo)

# # A tibble: 4 x 4
#   Var1  Var2.a Var3.a Var4.a
#   <chr>  <int>  <int>  <int>
# 1 A          2      2      2
# 2 B          1     NA      1
# 3 C          2      2      2
# 4 D          2     NA      2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多