提问人:Flux 提问时间:4/3/2014 最后编辑:Gregor ThomasFlux 更新时间:8/28/2023 访问量:59363
如何处理非标准列名(空格、标点符号、以数字开头)
How to deal with nonstandard column names (white space, punctuation, starts with numbers)
问:
df <- structure(list(`a a` = 1:3, `a b` = 2:4), .Names = c("a a", "a b"
), row.names = c(NA, -3L), class = "data.frame")
数据如下所示
a a a b
1 1 2
2 2 3
3 3 4
以下调用选择
select(df, 'a a')
给
Error in abs(ind[ind < 0]) :
non-numeric argument to mathematical function
如何使用“a a”和/或将其重命名为没有空格的内容?我知道以下方法:select
names(df)[1] <- "a"
select(df, a=1)
select(df, ends_with("a"))
但是,如果我正在处理一个大型数据集,我怎么能在不知道索引数字或类似列名的情况下获得完全匹配呢?
答:
您可以使用反引号来创建变量。select
`
select(df, `a a`)
# a a
# 1 1
# 2 2
# 3 3
但是,如果您的主要目标是重命名列,则可以在包中使用,您可以在其中同时使用 和 。rename
plyr
""
``
rename(df, replace = c("a a" = "a"))
rename(df, replace = c(`a a` = "a"))
或者在 R 中:base
names(df)[names(df) == "a a"] <- "a"
有关各种引号用法的更详尽说明,请参见。“名称和标识符”部分在这里尤为重要:?Quotes
可以使用其他 [语法无效] 名称,前提是它们被引用。首选报价是反引号”。
另请参阅有关有效名称的信息。?make.names
另请参阅这篇关于重命名的帖子dplyr
评论
select
select(df, a=`a a`)
rename
rename
setattr
data.table
setattr(df, 'names', c("a", "b"))
反引号的一些替代方案,从 dplyr 0.5.0 开始很好,截至撰写本文时的当前版本。
如果您尝试以编程方式选择参数作为列,并且不想重命名或将 / 列名重命名为反引号,则可以与 的非标准评估版本结合使用,该版本是:paste
sprintf
as.name
select
select_
dplyr::select_(df, as.name("a a"))
许多功能都有非标准版本。具体来说,您还可以将标准版本与 select helper 结合使用。有关文档,请参阅:dplyr
select
one_of
?dplyr::select_helpers
dplyr::select(df, dplyr::one_of("a a"))
评论
colnames(mtcars)[1] <- "Miles Per Gallon"
mtcars %>% select_("Miles Per Gallon")
mtcars %>% select_(as.name("Miles Per Gallon"))
工程。
截至 2023 年,之前给出错误的代码现在运行:
> select(df, 'a a')
a a
1 1
2 2
3 3
因此,对于“如何处理非标准列名”这个问题,一个合理的答案是,现在,将它们写成字符串(对于选择,这是开箱即用的,但对于mutate,你需要使用类似的东西mutate(df, a = .data[['a a']])
上一个:如何结束“调试”模式?[复制]
下一个:R:如何处理没有日期的时间?
评论