首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从重新编码的变量(原子向量)创建应急表

从重新编码的变量(原子向量)创建应急表
EN

Stack Overflow用户
提问于 2012-07-16 23:15:20
回答 1查看 794关注 0票数 0

又一个愚蠢的请求。我正在尝试使用经过编码的变量创建应急表,其中任何答案都被编码为"1“,而非答案被编码为”0“。

我的原始数据可能如下所示:一些变量是从字符串中编码的,而另一些变量则是从数字中编码的。

代码语言:javascript
复制
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     ...  

我已经编写了一些代码来完成字符串的重新编码,我使用一个应急表来检查它。

代码语言:javascript
复制
data$recode <- ifelse((as.numeric(data$var1)!=1), 1, 0) #RECODES STRINGS
table(data$recode)
    0     1
    1     3

但是,我还需要将所有其他变量中的NA重新编码为0。我试着用另一种I语句来做这件事:

代码语言:javascript
复制
 data <- ifelse(is.na(data), 0, 1)

这些值似乎有所改变,但现在当我试图运行相同的应急表时,我会得到以下错误消息:

代码语言:javascript
复制
  Error in data$recode : $ operator is invalid for atomic vectors

当前的关键问题是,我需要能够为我的所有变量(即报告百分比和频率)生成应急表,因此,帮助正确地将所有NA(列范围内)重新编码为0将非常有用。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-07-16 23:35:37

我认为你想强迫data$var1去字符,然后计数字符,而不是使用as.numeric。您还可以使用logical变量是二进制变量的事实,as.numeric(c(TRUE, FALSE))将给出c(1, 0)

代码语言:javascript
复制
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

编辑--处理多列

要同时执行多个列,请使用plyrcolwisecatcolwisenumcolwise中的函数。这些方法分别适用于离散数据、数值数据和数值数据的函数。

代码语言:javascript
复制
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    0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11513953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档