【问题标题】:recoding variables in a loop in R在R中的循环中重新编码变量
【发布时间】:2020-09-02 18:00:19
【问题描述】:

我想一起重新编码几个变量。所有这些变量都将经历相同的重新编码变化。 为此,我遵循了以下主题。下面的线程描述了两种方法。 1)。使用列号 2)。使用变量名

我都试过了,但我收到一条错误消息。

1) 和 2) 的错误消息。 (函数(var,recodes,as.factor,as.numeric = TRUE,levels)中的错误: 未使用的参数(2 = "1"、3 = "1"、1 = "0"、4 = "0"、na.rm = TRUE)

recode variable in loop R

#Uploading libraries
library(dplyr)
library(magrittr)
library(plyr)
library(readxl)
library(tidyverse)

#Importing file
mydata <- read_excel("CCorr_Data.xlsx")
df <- data.frame(mydata)
attach(df)

#replacing codes for variables
df %>%
  mutate_at(c(1:7), recode, '2'='1', '3'='1', '1'='0', '4'='0', na.rm = TRUE) %>%
  mutate_at(c(15:24), recode, '2'='0', na.rm = TRUE)


df %>% 
  mutate_at(vars(E301, E302, E303), recode,'2'='1', '3'='1', '1'='0', '4'='0', na.rm = TRUE) %>%
  mutate_at(vars(B201, B202, B203), recode, '2'='0', na.rm = TRUE)

谁能告诉我哪里出错了?

在我的数据集中存在缺失值,这就是我包含 na.rm = T 的原因。我什至尝试不包括缺失值命令,即使那时错误消息也是一样的。

请参阅下面的示例数据。

structure(list(Country = c(1, 1, 1, 1, 1, 1), HHID = c("12ae5148e245079f-122042", 
"12ae5148e245079f-123032", "12ae5148e245079f-123027", "12ae5148e245079f-123028", 
"12ae5148e245079f-N123001", "12ae5148e245079f-123041"), HHCode = c("122042", 
"123032", "123027", "123028", "N123001", "123041"), A103 = c(2, 
2, 2, 2, 2, 2), A104 = c("22", "23", "23", "23", "23", "23"), 
    Community = c("Mehmada", "Dhobgama", "Dhobgama", "Dhobgama", 
    "Dhobgama", "Dhobgama"), E301 = c(3, 3, 3, 3, 3, 3), E302 = c(3, 
    2, 4, 4, 3, 3), E303 = c(3, 2, 3, 3, 3, 3), E304 = c(3, 4, 
    4, 4, 3, 3), E305 = c(3, 2, 3, 3, 3, 3), E306 = c(3, 3, 3, 
    3, 3, 3), E307 = c(3, 3, 3, 3, 3, 3), E308 = c(3, 1, 3, 3, 
    3, 3), B201.1 = c(NA, 1, 1, 1, 1, 1), B202.1 = c(NA, 1, 1, 
    1, 1, 1), B203.1 = c(NA, 1, 1, 2, 2, 1), B204.1 = c(NA, 2, 
    1, 2, 1, 1), B205.1 = c(NA, 2, 1, 2, 2, 2), B206.1 = c(NA, 
    1, 1, 1, 2, 1), B207.1 = c(NA, 2, 1, 2, 2, 1), B208.1 = c(NA, 
    2, 2, 2, 2, 2), B209.1 = c(NA, 2, 1, 1, 1, 1), B210.1 = c(NA, 
    1, 1, 1, 1, 1)), row.names = c(NA, 6L), class = "data.frame")
    ```

【问题讨论】:

  • 尝试转换为character。类,即df %&gt;% mutate_at(c(1:7, 15:24), as.character) %&gt;%,然后是你的代码
  • dplyr::recode 没有 na.rm 参数。它是.missing = NULL。 (默认)。当对函数参数有疑问时,您可以使用help("recode")?recode
  • 不要使用attach,您还可以通过单击帖子底部的编辑并包括dput(head(df))来添加您的数据。这是一篇很好的参考帖子stackoverflow.com/questions/5963269,它分享了如何包含可重现的示例。
  • @RonakShah 这是添加样本数据的有用建议。效果很好!
  • @RitikaKhurana 我发表了我的评论作为解决方案。问题是na.rm

标签: r loops dplyr recode


【解决方案1】:

问题在于na.rm = TRUErecode 没有那个参数

library(dplyr)   
df %>% 
  mutate_at(vars(E301, E302, E303), recode,'2'='1', '3'='1', '1'='0', '4'='0') %>%
  mutate_at(vars(B201, B202, B203), recode, '2'='0')

【讨论】:

  • 非常感谢您回答这个帖子。
【解决方案2】:

尝试使用:

library(dplyr)

df %>%
  mutate_at(1:7, recode, '2'='1', '3'='1', '1'='0', '4'='0') %>%
  mutate_at(15:24, recode, '2'='0')

【讨论】:

  • 不幸的是,我得到了同样的错误。 (函数 (var, recodes, as.factor, as.numeric = TRUE, levels) 中的错误:未使用的参数 (2 = "1", 3 = "1", 1 = "0", @ 987654325@ = "0", .default = NA)
  • @RitikaKhurana 我没有收到您共享的数据的错误。你能重启 R,只加载 dplyr 再试一次吗?
  • 你说得对,我只需要加载dplyr 库。现在,错误已修复,但当我查看变量时,我发现它们没有发生任何变化。他们还是一样的。代码没有改变。我是否需要创建新变量或新数据框才能使更改生效?
  • 是的,您需要重新分配值。 df1 &lt;- df %&gt;% mutate_at(1:7, recode, '2'='1', '3'='1', '1'='0', '4'='0') %&gt;% mutate_at(15:24, recode, '2'='0')
  • 非常感谢!我的问题已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多