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"))