dplyr:非标准列名(空格、标点符号、以数字开头)

dplyr:非标准列名(空格、标点符号、以数字开头),r,dataframe,dplyr,R,Dataframe,Dplyr,下面的选择调用 a a a b 1 1 2 2 2 3 3 3 4 给予 abs中的错误(ind[ind%select(as.name(“每加仑英里数”)works.HI S-V-P,wlecome to SO!如果你看到这个问题的其他答案,你可以看到一些很好的例子。。。真正完整的回答,提供OP面临的问题以及具体解决方案的一般信息。我认为这可能更多的是一个评论(我知道,新用户可能不会发布),而不是一个完整的答案。实际上,我建议在其他用户投票之前删除它,因为我认为这不

下面的选择调用

  a a a b
1   1   2
2   2   3
3   3   4
给予

abs中的
错误(ind[ind<0]):
数学函数的非数值参数
如何使用
select
选择“a”和/或将其重命名为没有空格的名称?我知道以下方法:


  • names(df)[1]您可以
    使用反勾号
    `
    选择变量

    Error in abs(ind[ind < 0]) : 
      non-numeric argument to mathematical function
    
    但是,如果您的主要目标是重命名列,则可以在
    plyr
    包中使用
    rename
    ,在该包中,您可以同时使用

    select(df, `a a`)
    #   a a
    # 1   1
    # 2   2
    # 3   3
    
    或在
    base
    R中:

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

    names(df)[names(df)=“aa”]反勾号的一些替代方案,与本文撰写时的当前版本dplyr 0.5.0一样好

    如果您试图以编程方式选择一个参数作为列,并且不想重命名或执行类似于
    粘贴
    /
    sprintf
    的操作,则可以将
    作为.name
    选择
    的版本结合使用,即
    选择

    names(df)[names(df) == "a a"] <- "a"
    
    许多
    dplyr
    函数都有非标准版本。在
    select
    的情况下,您也可以将标准版本与select助手
    一起使用。有关文档,请参见
    ?dplyr::select_helpers

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

    您可以将间隔变量锁定在Esc下的“`”中。请注意,符号不同于您也可以使用
    select
    select(df,a=`a`)
    @Arun执行相同操作,谢谢您的建议。但是,这不是同时重命名“a”和仅选择此变量(与
    重命名
    相反)吗?Henrik,你说得对。但是
    rename
    将复制整个data.frame以重命名列。所以,我不会使用它。我不确定在
    data.table
    中是否有类似
    setattr
    的方法。例如:
    setattr(df,'names',c(“a”,“b”)
    通过引用在此处重命名。请注意,
    dplyr
    中有一个函数
    rename
    ,可以关闭
    plyr
    函数。如果你真的想要
    plyr
    版本,你可以做
    plyr:::rename
    。我经常收到电子表格来分析变量名的类似问题。我首先要做的事情之一是使用stringr包中的str_replace来清理这些文件。例如,将空格替换为句点。你从base提出的“make.names”的建议似乎是一个很好的解决方案,我以后会尝试。这是不正确的。即使是dplyr的NSE版本也不能处理它。例如:
    colnames(mtcars)[1]%选择“每加仑英里数”)
    这将返回一个错误。
    mtcars%>%select(as.name(“每加仑英里数”)
    works.HI S-V-P,wlecome to SO!如果你看到这个问题的其他答案,你可以看到一些很好的例子。。。真正完整的回答,提供OP面临的问题以及具体解决方案的一般信息。我认为这可能更多的是一个评论(我知道,新用户可能不会发布),而不是一个完整的答案。实际上,我建议在其他用户投票之前删除它,因为我认为这不符合网站完整答案的标准。谢谢
    names(df)[names(df) == "a a"] <- "a"
    
    dplyr::select_(df, as.name("a a"))
    
    dplyr::select(df, dplyr::one_of("a a"))