R 使用映射函数将列名称替换为数据框名称

标签 r map-function

我在使用 map 函数将列名替换为数据框名称时遇到问题。我有 25 个包含加密货币时间序列数据的数据帧。

ls(pattern="USD")
[1] "ADA.USD"   "BCH.USD"   "BNB.USD"   "BTC.USD"   "BTG.USD"   "DASH.USD"      "DOGE.USD"  "EOS.USD"   "ETC.USD"   "ETH.USD"   "IOT.USD"
[12] "LINK.USD"  "LTC.USD"   "NEO.USD"   "OMG.USD"   "QTUM.USD"  "TRX.USD"   "USDT.USD"  "WAVES.USD" "XEM.USD"   "XLM.USD"   "XMR.USD"
[23] "XRP.USD"   "ZEC.USD"   "ZRX.USD" 

每个对象都是一个数据框,代表以美元表示的加密货币。每个数据框都有 2 个 clomuns:日期和收盘价(收盘价)。例如:数据框“BTC.USD”代表以美元计价的比特币:

head(BTC.USD)
# A tibble: 6 x 2
Date       Close
1 2015-12-31  430.
2 2016-01-01  434.
3 2016-01-02  434.
4 2016-01-03  431.
5 2016-01-04  433.

现在我想用数据框的名称(“BTC.USD”)替换第二列的名称(“Close”)

对于本例,我使用了以下代码:

colnames(BTC.USD)[2] <-deparse(substitute(BTC.USD))

这段代码的工作原理正如我想象的那样:

head(BTC.USD)
# A tibble: 6 x 2
Date       BTC.USD
1 2015-12-31    430.
2 2016-01-01    434.
3 2016-01-02    434.

现在我尝试使用映射函数重命名加密货币数据的所有 25 个数据帧的所有“关闭”列:

names_of_dataframes <- ls.str(mode = "list")
map(names_of_dataframes, colnames(x)[2] <- names_of_dataframes[[i]])

但是这不起作用。有人可以帮助我吗?

最佳答案

我们使用mget将数据集放入list中,使用imap循环遍历list.y 重命名第二列,这给出了 data.frame 对象名称

library(tidyverse)
mget(ls(pattern="USD")) %>%         
              imap(~ {nm1 <- .y
                      .x %>% 
                         rename_at(2, ~ nm1) })

关于R 使用映射函数将列名称替换为数据框名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54222803/

相关文章:

正则表达式:删除除第一个字符和最后一个数字之外的所有内容

r - 使用示例代码继续在 ggplot2 中遇到错误 ""loop_apply“未从当前命名空间(plyr)解析”

r - geom_step 的空心直方图或分箱

r - 更改表格边框的边框颜色 - Kable

scala - 如何在Scala中从一组String中产生一组Char

javascript - 无法通过 redux 动态创建的数组进行映射

r - data.table - setkey(...) 是否创建索引或对数据表中的行进行物理重新排序?

arrays - Swift 中 Int 数组的示例变体

r - 如何使用r中的map函数查找范围和分位数

python - 映射 python 字典中的值