重新编码成相同的变量
recode into same variable
我有一大组包含 110 个变量的调查数据。有些答案的范围从 1 到 5,其中 1 最好,5 最差。为了进行分析,我想将其反转,其中 5=1、4=2、3=3、2=4 和 1=5。
如果我将它放入一个对象中,它会起作用:
x_inv <- recode(x, "5=1; 4=2;3=3;2=4; 1=5")
然而,如果我这样做,我将结束拥有 110 个对象。
因此,我正在寻找一种直接在数据框中更改该变量的方法。
因为我试过重新编码:
recode(x, "5=1; 4=2;3=3;2=4; 1=5")
如果您查看该变量,那是可行的,但如果您要求平均值,它并没有改变,例如从 1.82 到 4.18。
有人知道怎么做吗?
这是我将如何做的更详细的说明。
library(car) #* contains the recode function
#* Construct a sample data set
DFrame <- lapply(1:10,
function(i) sample(1:5, 15, replace = TRUE))
DFrame <- as.data.frame(DFrame)
set.seed(pi)
DFrame$id = LETTERS[1:15]
DFrame <- DFrame[, c(11, 1:10)]
names(DFrame)[-1] <- paste0("Var", 1:10)
DFrame
#* Identify variables that need to be recoded.
#* Searches for any variable that has only values in 1:5
var_to_reverse <-
vapply(DFrame,
function(x) all(x %in% 1:5),
logical(1))
#* In your case, I think recode is a bit of overkill
#* Here's how to do it with 6 - x
DFrame2 <- DFrame
DFrame2[, var_to_reverse] <-
lapply(DFrame2[, var_to_reverse, drop = FALSE],
function(x) 6 - x)
#* Here's how to do it with recode, if you have a more complex situation.
DFrame3 <- DFrame
DFrame3[, var_to_reverse] <-
lapply(DFrame3[, var_to_reverse, drop = FALSE],
recode,
recodes = "5=1; 4=2;3=3;2=4; 1=5")
#* confirm that both methods provide the same result.
identical(DFrame2, DFrame3)
我有一大组包含 110 个变量的调查数据。有些答案的范围从 1 到 5,其中 1 最好,5 最差。为了进行分析,我想将其反转,其中 5=1、4=2、3=3、2=4 和 1=5。
如果我将它放入一个对象中,它会起作用:
x_inv <- recode(x, "5=1; 4=2;3=3;2=4; 1=5")
然而,如果我这样做,我将结束拥有 110 个对象。 因此,我正在寻找一种直接在数据框中更改该变量的方法。
因为我试过重新编码:
recode(x, "5=1; 4=2;3=3;2=4; 1=5")
如果您查看该变量,那是可行的,但如果您要求平均值,它并没有改变,例如从 1.82 到 4.18。
有人知道怎么做吗?
这是我将如何做的更详细的说明。
library(car) #* contains the recode function
#* Construct a sample data set
DFrame <- lapply(1:10,
function(i) sample(1:5, 15, replace = TRUE))
DFrame <- as.data.frame(DFrame)
set.seed(pi)
DFrame$id = LETTERS[1:15]
DFrame <- DFrame[, c(11, 1:10)]
names(DFrame)[-1] <- paste0("Var", 1:10)
DFrame
#* Identify variables that need to be recoded.
#* Searches for any variable that has only values in 1:5
var_to_reverse <-
vapply(DFrame,
function(x) all(x %in% 1:5),
logical(1))
#* In your case, I think recode is a bit of overkill
#* Here's how to do it with 6 - x
DFrame2 <- DFrame
DFrame2[, var_to_reverse] <-
lapply(DFrame2[, var_to_reverse, drop = FALSE],
function(x) 6 - x)
#* Here's how to do it with recode, if you have a more complex situation.
DFrame3 <- DFrame
DFrame3[, var_to_reverse] <-
lapply(DFrame3[, var_to_reverse, drop = FALSE],
recode,
recodes = "5=1; 4=2;3=3;2=4; 1=5")
#* confirm that both methods provide the same result.
identical(DFrame2, DFrame3)