r - 使用 for 循环在 R 中转换列名
问题描述
我正在尝试使用 for loop c("2000", "2001",..., "2011") 来重写以下代码。每个数据帧包括变量“emp_01”、“emp_02”等。为了区分这些变量,我想使用后缀“emp_01.2000”、“emp_02.2000”并将“fips”转换为合并。您能告诉我在这种情况下如何编写 for 循环吗?
colnames(df_2000) <- paste(colnames(df_2000), "2000", sep = ".")
df_2000 <- df_2000 %>%
rename(fips = fips.2000)
colnames(df_2001) <- paste(colnames(df_2001), "2001", sep = ".")
df_2001 <- df_2001 %>%
rename(fips = fips.2001)
...
解决方案
我们可以mget
用来获取 a 中的对象list
,然后更改值
library(dplyr)
library(purrr)
library(stringr)
lst1 <- mget(ls(pattern = '^df_\\d{4}$')) %>%
map(~ .x %>%
rename_at(vars(starts_with('fips')), ~ str_remove(., '\\.\\d{4}$')))
最好将对象保留在列表中,而不是更新原始对象。但是,如果我们需要
list2env(lst1, .GlobalEnv)
如果我们需要加入所有list
元素
reduce(lst1, full_join, by = 'fips')
或者,如果我们考虑将所有数据集data.frame
与list
另一个数据集“pop”连接起来
map(lst1, ~ full_join(.x, pop, by = 'fips'))
推荐阅读
- asp.net-core - ASP.NET Core HealthChecks 使用 RabbitMQ 报告假阴性
- android - 是否可以将 Java 字符串常量传递给 Gradle 文件?
- php - 如何检查是否仅选中了一个或两个复选框
- redis - 是否可以在 rejson 数组中使用 LRANGE?
- ios - iOS 模拟器在运行排毒测试时冻结(挂起)
- sap-cloud-platform - SAP Cloud Platform Portal 服务中如何实现动态数据?
- scala - Spark Scala java.lang.NoSuchMethodError:在 CDH 5.16 中执行 fat jar 时
- ios - 如何为 UIViews 的“中心”属性设置动画?
- laravel-nova - Laravel Nova 在产品创建/更新页面上按模式添加类别
- kubernetes - 如何在 helm 中将变量从父级传递给子级?