【问题标题】:Adding a suffix and changing values of multiple columns [duplicate]添加后缀并更改多列的值[重复]
【发布时间】:2023-03-29 13:05:02
【问题描述】:

我有一些变量,我想以相同的方式进行转换。

library(dplyr)
glimpse(samp)

Observations: 5
Variables: 4
$ Q26_1_1 <dbl+lbl> 1, 3, NA, 2, 4
$ Q26_2_1 <dbl+lbl> 1, 3, NA, 2, 4
$ Q26_3_1 <dbl+lbl> 1, 3, NA, 2, 4
$ Q26_4_1 <dbl+lbl> 1, 3, NA, 2, 4

所有变量的范围是1到5。如果一个条目是1我想把它转换成1 else to 0。

通常我使用ifelse 喜欢:

samp %>%
  mutate(Q26_1_1_t1 = ifelse(Q26_1_1 == 1, 1, 0),
         Q26_2_1_t1 = ifelse(Q26_2_1 == 1, 1, 0),
         Q26_3_1_t1 = if_else(Q26_3_1 == 1, 1, 0),
         Q26_4_1_t1 = ifelse(Q26_4_1 == 1, 1, 0))

但是,如果有 40 或 60 个变量,则非常耗时。有没有像mutate_at 这样的方法来制作更短的代码?

Here 就是一个例子。我是这样改编的:

f = function(x) {
  ifelse(x == 1, 1, 0)
} 

samp %>% 
mutate_at(vars(contains("Q26")), funs(f))

...但不包括重命名(例如 Q26_4_1 到 Q26_4_1_t1)。

添加后缀并更改多个变量的值

【问题讨论】:

  • 你能让这篇文章可重现并显示相同的预期输出吗?

标签: r dplyr


【解决方案1】:

我是这样做的:

f = function(x) {
  ifelse(x == 1, 1, 0)
} # Writing the function to convert 1 to 1 and all other values to 0. 


samp %>% 
  mutate_at(vars(contains("Q26")), .funs = list(t1 = ~ntile(., 2))) %>%
  # Adding "t1" to the variables (rename). 

找到它here

  mutate_at(vars(contains("t1")), funs(f))
  # Mutate the renamed variables with ifelse. 

这可行,但可以有更好的解决方案。实际上,它是两种威胁的复制品。

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 2018-04-24
    • 2012-10-19
    • 1970-01-01
    • 2016-11-14
    • 2018-08-24
    • 2012-01-03
    • 2017-04-20
    • 2020-08-26
    相关资源
    最近更新 更多