r - R用映射函数的数据框名称替换列名
问题描述
我有一个问题,用地图函数用数据框名称替换列名。我有 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 个 clomun:日期和收盘价(收盘价)。例如:数据框“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”)替换第二列的名称(“关闭”)
对于这种情况,我使用了以下代码:
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]])
但它不起作用。有人能帮我吗?
解决方案
我们将数据集放入list
with mget
,遍历list
with imap
,rename
第二列.y
给出data.frame
对象名称
library(tidyverse)
mget(ls(pattern="USD")) %>%
imap(~ {nm1 <- .y
.x %>%
rename_at(2, ~ nm1) })
推荐阅读
- python - 每 3 个值创建一个包含 3 个值的列表
- ios - 在 C/C++ 中使用 MIDISendEventList() 发送 MIDI
- javascript - 当xhr返回503时如何自动重新运行ajax调用
- sql - 从 VARCHAR2 中提取最近的日期
- azure - Azure AD:请求的联合领域对象不存在
- android - 一起使用 Inject 和 AssistedInject
- java - 是否可以将 EL 用作独立的模板语言?
- sql - 生成最小和最大日期之间的日期范围 Athena presto SQL 序列错误
- yaml - xacro 通过提供变量从 YAML 中获取值
- postgresql - 使用 PostgreSQL 根据 UTC 列值查找昨天和今天之间的记录时遇到问题