【问题标题】:how to convert multiple variables column with 0 & 1 to yes & no in R [duplicate]如何在R中将具有0和1的多个变量列转换为是和否[重复]
【发布时间】:2020-07-04 10:12:18
【问题描述】:

这里的新手还在学习 R。

我正在尝试将具有 0 和 1 的选择性列转换为是或否。

我是在做一个一行一行的新手方式

s_r_data_no_na_split_rename_conv <- s_r_data_no_na_split_rename %>%
  mutate(BPMeds = ifelse(BPMeds == "1","Yes","No"))

s_r_data_no_na_split_rename_conv <- s_r_data_no_na_split_rename %>%
  mutate(prevalentStroke = ifelse(prevalentStroke == "1","Yes","No"))

s_r_data_no_na_split_rename_conv <- s_r_data_no_na_split_rename %>%
  mutate(prevalentHyp = ifelse(prevalentHyp == "1","Yes","No"))

s_r_data_no_na_split_rename_conv <- s_r_data_no_na_split_rename %>%
  mutate(TenYearCHD = ifelse(TenYearCHD == "1","Yes","No")

但它似乎不起作用,只有最后选择的变量列“TenYearCHD”被转换为是/否。

以及如何同时将它们全部转换为因子?我只知道一行一行。

s_r_data_no_na_split_rename_conv$BPMeds <- as.factor(s_r_data_no_na_split_rename_conv$BPMeds)
s_r_data_no_na_split_rename_conv$prevalentStroke <- as.factor(s_r_data_no_na_split_rename_conv$prevalentStroke)
s_r_data_no_na_split_rename_conv$prevalentHyp <- as.factor(s_r_data_no_na_split_rename_conv$prevalentHyp)
s_r_data_no_na_split_rename_conv$TenYearCHD <- as.factor(s_r_data_no_na_split_rename_conv$TenYearCHD)

【问题讨论】:

  • 因为你每次都会覆盖s_r_data_no_na_split_rename_conv。合二为一mutate

标签: r dplyr


【解决方案1】:

您可以使用across 将相同的功能应用于多个列。

library(dplyr)
s_r_data_no_na_split_rename %>%
  mutate(across(c(BPMeds, prevalentStroke, prevalentHyp, TenYearCHD), 
                  ~factor(ifelse(.x == "1","Yes","No"))))
                  #Without ifelse
                  #~factor(c('No', 'Yes')[(.x == "1") + 1]))

在早期版本的 dplyr 中,这是使用 mutate_at 完成的:

s_r_data_no_na_split_rename %>%
   mutate_at(vars(c(BPMeds, prevalentStroke, prevalentHyp, TenYearCHD)), 
                  ~factor(ifelse(.x == "1","Yes","No")))

【讨论】:

    【解决方案2】:

    match 使用lapply 为您的数据分配矩阵。 例子:

    dat
    #           x0 X1 X2 X3
    # 1  0.5390238  1  1  1
    # 2  0.5802063  1  1  0
    # 3 -0.6575028  0  1  1
    
    FUN <- function(x) {
      m <- matrix(c(0, 1, "No", "Yes"), 2, 2)
      m[match(x, m[,1]), 2]
    }
    
    dat[2:4] <- lapply(dat[2:4], FUN)
    dat
    #           x0  X1  X2  X3
    # 1  0.5390238 Yes Yes Yes
    # 2  0.5802063 Yes Yes  No
    # 3 -0.6575028  No Yes Yes
    

    玩具数据:

    dat <- structure(list(X0 = c(0.539023801893912, 0.580206320853481, -0.657502835154674
    ), X1 = c(1, 1, 0), X2 = c(1, 1, 1), X3 = c(1, 0, 1)), row.names = c(NA, 
                                                                         -3L), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2016-08-11
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多