又一个愚蠢的请求。我正在尝试使用经过编码的变量创建应急表,其中任何答案都被编码为"1“,而非答案被编码为”0“。
我的原始数据可能如下所示:一些变量是从字符串中编码的,而另一些变量则是从数字中编码的。
id var1 recode var2 recode2 ... var250 recode250
1 "hello" 1 1 1 ...
2 "hi" 1 <NA> 0 ...
3 0 <NA> 0 ...
4 "hola" 1 1 1 ... 我已经编写了一些代码来完成字符串的重新编码,我使用一个应急表来检查它。
data$recode <- ifelse((as.numeric(data$var1)!=1), 1, 0) #RECODES STRINGS
table(data$recode)
0 1
1 3但是,我还需要将所有其他变量中的NA重新编码为0。我试着用另一种I语句来做这件事:
data <- ifelse(is.na(data), 0, 1)这些值似乎有所改变,但现在当我试图运行相同的应急表时,我会得到以下错误消息:
Error in data$recode : $ operator is invalid for atomic vectors当前的关键问题是,我需要能够为我的所有变量(即报告百分比和频率)生成应急表,因此,帮助正确地将所有NA(列范围内)重新编码为0将非常有用。谢谢!
发布于 2012-07-16 23:35:37
我认为你想强迫data$var1去字符,然后计数字符,而不是使用as.numeric。您还可以使用logical变量是二进制变量的事实,as.numeric(c(TRUE, FALSE))将给出c(1, 0)。
data <- data.frame(var1 = c('hello','hi','','lola'),
var2 = c(1,NA,NA,1))
data$recode_1 <- as.numeric(nchar(as.character(data$var1)) > 0)
data$recode_2 <- as.numeric(!is.na(data$var2))
data
## var1 var2 recode_1 recode_2
## 1 hello 1 1 1
## 2 hi NA 1 0
## 3 NA 0 0
## 4 lola 1 1 1编辑--处理多列
要同时执行多个列,请使用plyr、colwise、catcolwise和numcolwise中的函数。这些方法分别适用于离散数据、数值数据和数值数据的函数。
library(plyr)
recode_character <- function(.col){
as.numeric(nchar(as.character(.col)) > 0 )
}
recode_numeric <- function(.col){
as.numeric(!is.na(.col))
}
data_more <- data.frame(var1 = c('hello','hi','','lola'), var2 = c(1,NA,NA,1), var3 = c(1,1,NA,NA), var4 = c('again','with','','Missing'))
recoded_data <- cbind(catcolwise(recode_character)(data_more),
numcolwise(recode_numeric)(data_more))
recoded_data
## var1 var4 var2 var3
## 1 1 1 1 1
## 2 1 1 0 1
## 3 0 0 0 0
## 4 1 1 1 0https://stackoverflow.com/questions/11513953
复制相似问题