更改列名,然后将所有负值转换为 NA

问题描述

嗨,我正在尝试将所有列名更改为不同的名称,然后将所有包含负值的列向量转换为 NA。我猜对了第二部分,但由于某种原因,我无法将列名正确更改为不同的名称。这是我的代码;请注意, mscr 是带有我希望更改的列名的 csv;我只是将其重命名为 df2。感谢您的时间和帮助。

df2 <- mscr %>%
  rename(
    caseid = R0000100,children2000 = R6389600
    )

df2 <- mscr
df2[df2 < 0] <- NA

解决方法

我可能会误解,但我认为您正在做的是重命名列(成功),然后用原始数据覆盖新重命名的数据。也就是说,

df2 <- mscr %>% rename(...)

是正确的,然后应该更改名称。你做的那一刻

df2 <- msvr

在替换非正值之前,您需要恢复所做的任何更改。

rename(以及几乎 dplyr 中的每个“动词”函数以及 R 中的许多函数)仅以函数方式运行,这意味着输入数据完全不变.如果就地更改,这将是 "side effect",并且与在 R 中做事的“正常/惯用方式”背道而驰。

试试这个:

library(dplyr)
df2 <- mscr %>%
  rename(
    caseid = R0000100,children2000 = R6389600
  ) %>% 
  mutate(across(everything(),~ if_else(. < 0,.[NA],.)))

人们通常希望使用 just NA,但由于 NA 在技术上是一个 logical 类,我推断您的数据是 { {1}} 或 numeric,我们需要获得正确的类。一种选择是分别对 integernumeric 列执行此步骤,我们将分别使用 integerNA_real_。但是,在这种情况下,NA_integer_ 会将 .[NA] 归类为与原始列数据相同的类别。