R 重命名管道中的多个变量
dplyr和magrittr等软件包所支持的管道隐喻非常有用,对于使您的代码在R中可读(一项艰巨的任务!) 如何创建以将数据帧中的所有变量重命名为预定义列表而结束的管道 这是我试过的。首先,要测试的简单样本数据:R 重命名管道中的多个变量,r,rename,dplyr,magrittr,R,Rename,Dplyr,Magrittr,dplyr和magrittr等软件包所支持的管道隐喻非常有用,对于使您的代码在R中可读(一项艰巨的任务!) 如何创建以将数据帧中的所有变量重命名为预定义列表而结束的管道 这是我试过的。首先,要测试的简单样本数据: > library(dplyr) > iris %>% head(n=3) %>% select(-Species) %>% t %>% as.data.frame -> test.data > test.data
> library(dplyr)
> iris %>% head(n=3) %>% select(-Species) %>% t %>% as.data.frame -> test.data
> test.data
1 2 3
Sepal.Length 5.1 4.9 4.7
Sepal.Width 3.5 3.0 3.2
Petal.Length 1.4 1.4 1.3
Petal.Width 0.2 0.2 0.2
这不起作用:
> test.data %>% rename(a=1,b=2,c=3)
Error: Arguments to rename must be unquoted variable names. Arguments a, b, c are not.
通过阅读rename
上的文档,我无法理解此错误的确切含义。我的另一个尝试通过使用大括号定义代码块来避免错误,但重命名实际上没有发生:
> test.data %>% { names(.) <- c('a','b','c')}
>test.data%>%{names(.)按照我的工作方式,我需要magrittr包中的tee操作符:
> library(magrittr)
> test.data %T>% { names(.) <- c('a','b','c')} -> renamed.test.data
> renamed.test.data
a b c
Sepal.Length 5.1 4.9 4.7
Sepal.Width 3.5 3.0 3.2
Petal.Length 1.4 1.4 1.3
Petal.Width 0.2 0.2 0.2
不过,上面的技巧(编辑:或者,更好的是,使用集合名)仍然很有用,因为有时你已经在字符向量中有了名称列表,你只想一次将它们全部设置好,而不用担心写出每个替换对。'1'、'2'、'3'除了使用集合名{stats}而不是重命名之外,你是正确的(zx8754在我面前的评论中回答)
setNames:这是一个方便的函数,用于设置
对象并返回该对象。它在
创建要返回的对象的函数定义
并且不希望将其存储在一个名称下,这样名称就可以
分配的
您的示例(关闭仅使用setNames更改重命名)
答复
iris %>%
head(n=3) %>%
select(-Species) %>%
t %>%
as.data.frame %>%
setNames(c('1','2','3'))
另一个例子
name_list <- c('1','2','3')
iris %>%
head(n=3) %>%
select(-Species) %>%
t %>%
as.data.frame %>%
setNames(name_list)
name\u列表%
水头(n=3)%>%
选择(-Species)%>%
t%>%
as.data.frame%>%
集合名称(名称列表)
我们可以使用dplyr::rename
重命名数值变量名,方法是将其括在后引号(`)中
库(dplyr)
虹膜%>%
头部(n=3)%%>%选择(-Species)%%>%t%%>%as.data.frame%%
dplyr::rename(a=`1`,b=`2`,c=`3`)
#a、b、c
#萼片长度5.1 4.9 4.7
#萼片宽3.5 3.0 3.2
#花瓣长度1.41.41.3
#花瓣宽度0.20.20.2
另一种方法是,我们可以使用stats::setNames
、magrittr::set_names
和purr::set_names
设置列名
库(dplyr)
图书馆(magrittr)
图书馆(purrr)
虹膜%>%
头部(n=3)%%>%选择(-Species)%%>%t%%>%as.data.frame%%
stats::setNames(c(“a”、“b”、“c”))
虹膜%>%
头部(n=3)%%>%选择(-Species)%%>%t%%>%as.data.frame%%
magrittr::set_名称(c(“a”、“b”、“c”))
虹膜%>%
头部(n=3)%%>%选择(-Species)%%>%t%%>%as.data.frame%%
purrr::set_名称(c(“a”、“b”、“c”))
#以上所有代码的结果如下:
#a、b、c
#萼片长度5.1 4.9 4.7
#萼片宽3.5 3.0 3.2
#花瓣长度1.41.41.3
#花瓣宽度0.20.20.2
我喜欢人们这样回答自己的问题。谢谢!(对我来说这不是一个相关的问题,但我仍然喜欢)请在你的问题中提供一个可复制的例子。如果你自己没有回答这个问题,这可能会因为几个原因而关闭。我建议遵循rawr的建议:在你的问题中加入一个例子。另外,去掉元评论。如果你想谈论自我回答,你可以在你自己的帖子下面添加一条评论。帖子应该是关于问题不是关于你回答的事实,也不是关于答案不像我想象的那么简单。最初的尝试是在数字rename(a='1',b='2',c='3'周围加上反勾
@rawr,我不知道你的抱怨是什么。这个问题包含了一个使用基础安装中的数据的可复制示例。缺少什么?你在说什么“聊天”呢?为什么不iris%%>%head(n=3)%%>%select(-Species)%%>%t%%as.data.frame%%>%setNames(c('a','b','c')
无管道:setNames(as.data.frame)(t(虹膜[1:3,-5])),字母[1:3])
管道并不是绝对必要的,但它们的可读性非常好,因为它们允许从左到右的读取操作,如dplyr文档中所述:多亏了所有告诉我设置名称的人,这确实起到了作用!我不知道为什么在谷歌搜索的任何时间都没有出现,但现在这一切都在o中这是一个方便子孙后代的地方。
iris %>%
head(n=3) %>%
select(-Species) %>%
t %>%
as.data.frame %>%
setNames(c('1','2','3'))
name_list <- c('1','2','3')
iris %>%
head(n=3) %>%
select(-Species) %>%
t %>%
as.data.frame %>%
setNames(name_list)