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
答案 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')