在循环R中重新编码变量

时间:2018-07-20 20:46:04

标签: r

im试图在一个循环中重新编码很多变量(超过53个),但是它不起作用。有人可以告诉我,我的错误在哪里?

我给你一个小例子

data <-  read.csv("test.csv", header = TRUE, ";", na = -77)

data$var1 <- recode(data$var1, "1=0; 2=1; 3=2; 4=3; NA=NA")

在这里,我有var 1-59和一些必须以不同方式重新编码的项目。

我尝试过

for (i in 1:59){
get(paste0(data$var",i)) <- recode(paste0("data$var",i), "1=0; 2=1; 3=2; 4=3; NA=NA"
}

for (i in c(65, 73, 99){
get(paste0(data$var",i)) <- recode(paste0("data$var",i), "1=0; 2=0; 3=0; 4=1; NA=NA"
}

该代码将不起作用。我的错误在哪里?有人可以给我个后腿吗?

非常感谢:) derlu

2 个答案:

答案 0 :(得分:1)

您可以使用False_Measure = COUNTAX(FILTER('Table_Name','Table_Name'[Column_Name]=FALSE()),FALSE()) True_Measure = COUNTAX(FILTER('Table_Name','Table_Name'[Column_Name]=FALSE()),TRUE()) 函数重新编码值,并使用switch重新编码所有列中的值:

data.table

答案 1 :(得分:0)

一种更具可读性的tidyverse解决方案如何?

library(dplyr)
library(magrittr)

data %<>% 
  mutate_at(c(1:59)    , recode, '1'='0', '2'='1', '3'='2', '4'='3') %>%
  mutate_at(c(65,73,99), recode, '1'='0', '2'='0', '3'='0', '4'='1')

如果愿意,还可以使用字符向量作为传递给mutate_at的第一个参数。像这样:

data %<>% 
  mutate_at(paste0('var', c(1:59))    , recode, '1'='0', '2'='1', '3'='2', '4'='3') %>%
  mutate_at(paste0('var', c(65,73,99)), recode, '1'='0', '2'='0', '3'='0', '4'='1')

第三个选项(在此情况下不适用,因为列太多了)是使用vars

data %>% 
  mutate_at(vars(var65, var73, var99), recode, '1'='0', '2'='0', '3'='0', '4'='1')