R语言 如何处理非标准列名(白色、标点符号、以数字开头)

6tr1vspr  于 2023-02-10  发布在  其他
关注(0)|答案(3)|浏览(188)
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

如何使用select选择“a a”和/或将其重命名为不带空格的内容?我知道以下方法:

  1. names(df)[1] <- "a"
  2. select(df, a=1)
  3. select(df, ends_with("a"))
    但是如果我正在处理一个大的数据集,那么在不知道索引号或类似列名的情况下,我如何才能获得精确的匹配呢?
r7knjye2

r7knjye21#

您可以使用反勾```来select变量。

select(df, `a a`)
#   a a
# 1   1
# 2   2
# 3   3

但是,如果您的主要目的是重命名列,则可以在plyr包中使用rename,在该包中可以同时使用""和````。

rename(df, replace = c("a a" = "a"))
rename(df, replace = c(`a a` = "a"))

或者在base R中:

names(df)[names(df) == "a a"] <- "a"

有关各种引号用法的详细说明,请参见?Quotes。“名称和标识符”部分在此处尤其相关:
其他[语法无效]名称可以使用,只要它们用引号括起来。2首选引号是反引号”。
另请参见?make.names了解有效名称。
另请参见this post有关在dplyr中重命名的信息

idfiyjo8

idfiyjo82#

一些反勾号的替代品,最好是dplyr0.5.0,这是撰写本文时的最新版本。
如果您试图以编程方式选择一个参数作为列,并且不想重命名列名称或执行类似于paste/sprintf的操作将列名称添加到反勾号中,则可以将as.nameselectnon-standard evaluation版本结合使用,即select_

dplyr::select_(df, as.name("a a"))

许多dplyr函数都有非标准版本。特别是在select的情况下,您还可以将标准版本与选择帮助器one_of结合使用。有关文档,请参阅?dplyr::select_helpers

dplyr::select(df, dplyr::one_of("a a"))
rqmkfv5c

rqmkfv5c3#

您可以在Esc下的"'"中锁定您的空格变量。注意符号与〈'〉不同
a b\

相关问题