r - 使用不断变化的列表重命名 R 数据框中的列的函数
问题描述
我经常准备我在工作中分享的统计数据汇总表。这些表格通常包含相同类型的数据和列标题(例如违反章程的数量、单位数量等)。我经常使用 R 数据框中的速记列名(“nbbldg”、“nbunits”、“nbvl”)或从导入表继承的其他列名。这是一个例子:
df <-
data.frame(
DESCRIPTION_TXT_BLW = c(
"Missing plumbing fixture",
"Improperly installed heating unit",
"Loose or damaged siding",
"Peeling paint"
),
DESCR_UNIT = c("Apartment", "Apartment", "Common area", "Common area"),
nbvl = as.integer(c(12, 4, 76, 4))
)
然后,在通过以下函数(提供的示例列表)导出到 csv 之前,我将列名转换为它们的“可读”对应项:
changecolnames<-function (df, codetotext)
{
lapply(names(df), function(x) {
if (x %in% names(codetotext)) {
codetotext[[x]]
}
else {
x
}
})
}
readablecolnames <-
list(
"DESCR_UNIT" = "Description of unit",
"DESCRIPTION_TXT_BLW" = "Description of bylaw violation",
"nbvl" = "Number of bylaw violations"
)
names(df)<-changecolnames(df, readablecolnames)
到目前为止,我有项目特定的列表,允许我转换列名。我想将不同的列表聚合成一个可从任何 R 项目(在 RStudio 中)访问的全局列表,并不断添加。我的目标是避免在每个项目中创建一个列表,而是引用一种易于更新的主“库”。实现这一目标的最佳方法是什么?
解决方案
我要做的是有一个包含此名称列表的中央 R 文件,然后source
将其加载到每个项目中。
如果您希望将名称对保存在.csv
文件中,则此 R 文件可以改为从单个文件生成名称列表,而不是自己保存:
name_pairs.csv:
short_name,full_name
DESCR_UNIT,Description of unit
DESCRIPTION_TXT_BLW,Description of bylaw violation
nbvl,Number of bylaw violations
load_name_pairs.R:
name_pairs <- read.table('~/Desktop/test/name_pairs.csv', sep = ',',
header = TRUE, stringsAsFactors = FALSE)
readablecolnames <- name_pairs$full_name
names(readablecolnames) <- name_pairs$short_name
rm(name_pairs)
在您的 R 项目开始时:
source('~/Desktop/test/load_name_pairs.r')
readablecolnames
DESCR_UNIT DESCRIPTION_TXT_BLW nbvl
"Description of unit" "Description of bylaw violation" "Number of bylaw violations"
如您所见,通过使用source
on load_name_pairs.r
,文件中的所有代码都将sourced
运行,并且将对象移植到sourcing
环境中。因此,只需在项目文件中添加一行,您就可以加载和解析中心.csv
文件并访问项目中的结果。
推荐阅读
- python-3.x - 获取特定网站中带有线程和队列的文件图片
- android - 找不到 JetBrains.Kotlin 的实现参数
- racket - 将 Racket 测试的输出记录到文件中
- swift - 如何为不同大小的集合视图单元格设置角半径
- angular - Angular 订阅未定义的验证问题
- python - How to set the name of columns in the tree view through tree.plot_tree?
- deep-learning - 当调用类卷积时,它说错误
- ios - 如何在 Swift 的 UITabBarController 中重新加载/刷新当前选项卡?
- angular - 如何在 Angular 应用程序中编写自定义 .spec.ts 文件
- javascript - 使用两个不同的按钮播放两个不同的音频文件