首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法用R重新编码一个SPSS函数来创建一个新的变量?

有没有办法用R重新编码一个SPSS函数来创建一个新的变量?
EN

Stack Overflow用户
提问于 2019-07-18 21:53:30
回答 2查看 82关注 0票数 1

有人能帮我把SPSS重新编码成R吗?

SPSS代码:

代码语言:javascript
复制
RECODE variable1
(1,2=1)
(3 THRU 8 =2)
(9, 10 =3)
(ELSE = SYSMIS)
INTO variable2

我可以用不同的值创建新的变量。但是,我希望它和SPSS一样,在同一个变量中。

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2019-07-18 22:01:51

代码语言:javascript
复制
    x <- y<- 1:20
    x
    [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
    y[x %in% (1:2)] <- 1
    y[x %in% (3:8)] <- 2
    y[x %in% (9:10)] <- 3
    y[!(x %in% (1:10))] <- NA
    y
    [1]  1  1  2  2  2  2  2  2  3  3 NA NA NA NA NA NA NA NA NA NA
票数 0
EN

Stack Overflow用户

发布于 2019-07-18 22:01:51

我写了一个函数,它的代码与spss的代码recode非常相似。请看这里

代码语言:javascript
复制
variable1 <- -1:11
recodeR(variable1, c(1, 2, 1), c(3:8, 2), c(9, 10, 3), else_do= "missing")
NA NA  1  1  2  2  2  2  2  2  3  3 NA

此函数现在也适用于其他示例。这就是函数的定义方式

代码语言:javascript
复制
recodeR <- function(vec_in, ..., else_do){
l <- list(...)
# extract the "from" values
from_vec <- unlist(lapply(l, function(x) x[1:(length(x)-1)]))
# extract the "to" values
to_vec <- unlist(lapply(l, function(x) rep(x[length(x)], length(x)-1)))
# plyr is required for mapvalues
require(plyr)
# recode the variable
vec_out <- mapvalues(vec_in, from_vec, to_vec)
# if "missing" is written then all outside the defined range will be missings. 
# Otherwise values outside the defined range stay the same
if(else_do == "missing"){
vec_out <- ifelse(vec_in < min(from_vec, na.rm=T) | vec_in > max(from_vec, na.rm=T), NA, vec_out)
}
# return resulting vector
return(vec_out)}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57096180

复制
相关文章

相似问题

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