【问题标题】:Recode variables in R returns invalidR中的重新编码变量返回无效
【发布时间】:2020-04-10 17:27:03
【问题描述】:

我正在尝试重新编码这个变量,在将它转换为数字之后:

 e18$AntPT <- recode(e18$AntPT, 1 <- 0, 0 <- c(2:10))

但它会返回

 Error in 1 <- 0: invalid (do_set) left-hand side to assignment

另外,最终结果应该包括这3部分代码:

e18$AntPT <- as.numeric(e18$Q1501)

e18$AntPT <- recode(e18$AntPT, 1<-1, 0 <- c(2:10))



e18$AntPSDB <- as.numeric(e18$Q1505)

e18$AntPSDB <- recode(e18$AntPSDB, 10<-1, 0 <- c(2:10))



e18$AntPMDB <- as.numeric(e18$Q1502)

e18$AntPMDB <- recode(e18$AntPMDB, 100<-1, 0 <- c(2:10))

我要做的最后一件事是:

e18$Ant_Part <- (e18$AntPT + e18$AntPSDB + e18$AntPMDB)

这个总和的最终结果必须给我数字 0、1、10、11、100、101、110、111 - 其中一个数字给了我对最初问题的不同解释。

【问题讨论】:

  • 你能提供一个示例输入和预期输出吗?
  • 我应该让自己更清楚,对不起。我要编辑问题。

标签: r recode invalid-argument


【解决方案1】:

如果列中有其他数字并且只想更改特定数字

-之前

e18
#  AntPT AntPSDB AntPMDB
#1     1       1     100
#2     2      14       1
#3     4       2       2
#4     3      15     105
#5     1       7      24
#6     2      10       7
#7     3      11       8

现在,我们用lapply 和replace 遍历感兴趣的列,将列中的值设为0,它们是从2 到10

e18[c("AntPT", "AntPSDB", "AntPMDB")] <- lapply(e18[c("AntPT", 
  "AntPSDB", "AntPMDB")], function(x) replace(x, x %in% 2:10, 0))

以及 'AntPSDB'、'AntPMDB' (10, 100) 到 1 列中的具体数字

e18$AntPSDB[e18$AntPSDB == 10] <- 1
e18$AntPMDB[e18$AntPMDB == 100] <- 1

-之后

e18
#  AntPT AntPSDB AntPMDB
#1     1       1       1
#2     0      14       1
#3     0       0       0
#4     0      15     105
#5     1       0      24
#6     0       0       0
#7     0      11       0

然后求和

e18$Ant_Part <- (e18$AntPT + e18$AntPSDB + e18$AntPMDB)

数据

e18 <- data.frame(AntPT = c(1, 2, 4, 3, 1, 2, 3),
                   AntPSDB = c(1, 14, 2, 15, 7, 10, 11),
                   AntPMDB = c(100, 1, 2, 105, 24, 7, 8))

【讨论】:

  • 当我表 AntPT 时,它返回我 0 和 1,但它与 AntPSDB 相同。 AntPMDB 只给我数字 0。而且,他总和只返回 0 和 1,而不是我需要的所有数字。 ://
  • @LauraBeghini 从您的代码来看,您似乎正在将 1 编码为 1 并将 2 编码为 10 编码为 0 recode(e18$AntPT, 1&lt;-1, 0 &lt;- c(2:10))。是对的吗。或者你是说除了 1 到 10 以外的数字应该保持不变
  • 是的!这是正确的。这就是我想做的重新编码。现在去检查一下。
  • 总和返回给我以下数字:0 3 33 36 39 42。
  • 我现在明白了!谢谢。
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多