【问题标题】:Is there and R function for recoding variables?是否有用于重新编码变量的 R 函数?
【发布时间】:2020-02-05 23:15:26
【问题描述】:

我正在从 SPSS 过渡到 R,但遇到了一些初期问题。

我正在尝试重新编码变量,但收到错误消息。

以下是我尝试翻译的 SPSS 代码的一些示例:

RECODE income (1, 2 = 1) (3, 4 = 2) INTO income2.
EXECUTE.

* Recode to String.
STRING sex_values (A8).
RECODE sex (1 = 'Male') (2 = 'Female') INTO sex_values.
EXECUTE.

【问题讨论】:

  • 看看factor变量类型。在base r中有重新编码因子的选项,还有一个包forcats,它提供了许多方便的函数来操作因子。

标签: r spss


【解决方案1】:

请看一个名为 recode 的有趣的函数。

library(dplyr)
char_vec <- sample(c("a", "b", "c"), 10, replace = TRUE)
recode(char_vec, a = "Apple")

【讨论】:

    【解决方案2】:

    假设您有一个数字向量,其中包含集合 1、2、3、4 中的数字,并且您想将 1 和 2 替换为“男性”,将 3 和 4 替换为“女性”,那么这里有一些替代方案。

    1) 因素 这样就产生了这样一个因素。如果你想要一个字符向量,可以使用as.character(income2)

    income <- c(2, 1, 4, 3, 1, 4, 2)
    income2 <- factor(income, levels = 1:4, labels = c("male", "male", "female", "female"))
    income2
    ## [1] male   male   female female male   female male  
    ## Levels: male female
    

    2) 下标 这会创建一个字符向量

    income2 <- c("male", "male", "female", "female")[income]
    income2
    ## [1] "male"   "male"   "female" "female" "male"   "female" "male"  
    

    3) car::recode 在 car 包中有一个 recode 函数(在 dplyr 包中也有一个稍微不同的函数,在其他包中可能还有其他函数)。这将创建一个字符向量。如果您希望结果成为一个因素,请添加 as.factor = TRUE 参数。

    # assumes car package installed
    income2 <- car::recode(income, "1:2='male';3:4='female'")
    income2
    ## [1] "male"   "male"   "female" "female" "male"   "female" "male"  
    

    【讨论】:

    • 我要添加的唯一其他功能是 R 能够传递一个非常类似于 SPSS 的列表进行重新编码:income2 &lt;- factor(income); levels(income2) &lt;- list("male"=c(1,2), "female"=c(3,4))
    【解决方案3】:

    为简单起见,您可以使用 if_else() 函数在 R 中替换/重新编码您的数据。

    if_else(condition, true_result, false_result)检查条件是否满足,返回true_result,否则返回false_result。

    例如x= 3if_else(x&gt;2,"yes","no) 将返回输出:

    “是”


    因此,在您的情况下,您可以使用以下内容:

    
    if_else(sex==1,"Male","Female")
    if_else(income==(1 | 2),1,2)
    
    

    在这种情况下,您只需将数据的sex 列和income 列放在上述函数中即可对其进行重新编码。

    【讨论】:

    • 如果“默认”是指基本 R,那么 if_else 不是“默认”函数。它来自dplyr 包。 ifelse 是基础 R。您还确定 if_else(income==(1 | 2),1,2) 按预期工作吗?试试income = 2
    【解决方案4】:

    与 R 中的许多事情一样,有很多方法可以做到这一点。

    首先是使用ifelse函数。这是重新分类向量的有用功能,因为它以在替换之前满足条件的方式进行评估,因此支持更复杂的语句。

    ( x <- sample(1:2,20,replace=TRUE) )
      ifelse(x == 1, "male", ifelse(x == 2, "female", NA))
      ifelse(x == 1, "male", "female")
      ifelse(x == (1 | 2),"male","female")
    

    也可以直接替换向量中的元素

    x[x == 1] <- "male"
    x[x == 2] <- "female"
    print(x)
    

    还有使用因子和重新编码使用levels

    ( x <- as.factor(sample(1:2,20,replace=TRUE)) )
    levels(x)[1] <- "male"
    levels(x)[2] <- "female"
    print(x)
    

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2023-04-07
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多