问题描述
嗨,我正在尝试将所有列名更改为不同的名称,然后将所有包含负值的列向量转换为 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
,我们需要获得正确的类。一种选择是分别对 integer
和 numeric
列执行此步骤,我们将分别使用 integer
和 NA_real_
。但是,在这种情况下,NA_integer_
会将 .[NA]
归类为与原始列数据相同的类别。