【问题标题】:Creating variables in R- two issues在 R- 两个问题中创建变量
【发布时间】:2018-05-13 11:05:58
【问题描述】:

我有两个关于在 R 中创建新变量的基本问题。我将展示一些代码,希望有人可以帮助回答这些问题!

df0$new <- ifelse(df0$old=="yes",1,0)

在这段代码中,我创建了一个名为“new”的新变量,如果变量“old”等于 yes 或等于 0,则该变量等于 1。但在变量“old”中,我缺少数据(表示为 -99、-98、NAN)。那么我该如何解释缺失值呢?

第二个问题是关于使用“OR”语句的。

df0$z <- ifelse(df0$x1=="yes",1,0 | )

如果参与者对 5 个问题 (q1-q5) 中的任何一个回答“是”,我想创建一个等于 1 的新变量 z。所以我想对其进行编码,使其看起来像: z = 1 if q1 ==1 OR q2 == 1 OR q3 == 1 OR q4 == 1 OR q5 == 1. 如果 q1-q5 中没有一个等于 1 比 I想要将 z 设置为 0。但是,如上所述,这也带来了缺失值的问题。非常感谢!

【问题讨论】:

  • 解决方案取决于如果缺少旧值,您要为新变量分配什么值。它应该是 NA 还是 0?
  • 你的数据结构是什么?特别是q1 - q5的问题是不同的向量吗? (还有,是x1还是q1?)
  • 第一期还是df0$new &lt;- as.integer(df0$old == "yes")比较好。
  • 谢谢大家。 @jhvdz如果“旧”中缺少该值,我希望“新”中缺少该值。我目前对其进行编码的方式是,如果“旧”中缺少它,则“新”中将其设置为零,但这是我要解决的问题。
  • @Rui Barradas。 q1-q5 都是单独的列。如果它们中的任何一个值为“是”,那么我将新变量设为“1”。如果所有值都丢失,我想将 z 设置为丢失。如果所有值都是“否”,我想将 z 设置为“0”。谢谢!

标签: r recode


【解决方案1】:

您可以执行以下操作。

首先,去掉-99, -98 和NaN。我假设当您在问题中写 NAN 时,您的意思是 NaN。
将NA 值编码为NA。

is.na(df0$old) <- (df0$old %in% c(-99, -98)) | is.nan(df0$old)

现在,请注意 FALSE/TRUE 被编码为 0/1 并将逻辑结果强制转换为 integer 类。

df0$new <- as.integer(df0$old == "yes")
df0$z <- as.integer(q1 == "yes" | q2 == "yes" | q3 == "yes" | q4 == "yes" | q5 == "yes")

【讨论】:

  • 非常感谢。现在假设我想将其编码为 1 或 2 而不是 0 1?有没有简单的方法可以做到这一点?
  • @bvowe 是的,有。只需添加 1。
【解决方案2】:

第一部分的另一种解决方案。

library(dplyr) #because of left_join function
df1 <- data.frame(old = c("yes", "no"), new = c(1, 0))
df0 <- left_join(df0, df1)

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2023-03-12
    • 2021-08-06
    • 1970-01-01
    • 2021-08-13
    • 2020-08-19
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多