r - 创建循环以将标签添加到列:库(Hmisc)
问题描述
我有一个看起来像这样的数据集:
Year Country Matchcode P H
1 2000 France 0001 1213 1872
2 2001 France 0002 1234 2345
3 2000 UK 0003 1726 2234
4 2001 UK 0004 6433 9082
我有另一个数据集,看起来像这样:
Indicator Code Indicator Name
P Power
H Happiness
我想在第二个数据集(Power,Happiness)的第二列中添加信息作为第一个数据集中使用的缩写的标签,但我不知道如何编写循环。
这是我走了多远:
library(Hmisc)
for i in df2[,1]{
if (df1[,i] == df2[i,]){
label(df1[,i]) <- df2[i,2]
}}
但这只是检查名称是否相同,而不是搜索它。有人可以进一步指导吗?
期望的输出:
Year Country Matchcode P(label=Power) H(label=Happiness)
1 2000 France 0001 1213 1872
2 2001 France 0002 1234 2345
3 2000 UK 0003 1726 2234
4 2001 UK 0004 6433 9082
解决方案
如果您特别想使用循环,这种方法会给出您描述的输出:
df <- data.frame(Year = c(2000, 2001, 2000, 2001),
Country = c("France", "France", "UK","UK"),
Matchcode = c("0001", "0002", "0003", "0004"),
P = c(1213, 1234, 1726, 6433),
H = c(1872, 2345, 2234, 9082))
lookup <- data.frame(code = c ("P", "H"),
label = c("Power", "Happiness"),
stringsAsFactors = FALSE)
for (i in 1:length(colnames(df))) {
if(!is.na(match(colnames(df), lookup$code)[i])) {
Hmisc::label(df[[i]]) <- lookup$label[(match(colnames(df), lookup$code))[i]]
}
}
这有效:
Hmisc::label(df[4])
# P
# "Power"
它还在 RStudio 查看器中检出:
像其他几个回答者和评论者一样,我最初认为您想将“label =”文本附加到列名。对于任何想要的人,这是(循环)代码。
for (i in 1:length(colnames(df))) {
if(!is.na(match(colnames(df), lookup$code)[i])) {
colnames(df)[i] <- paste0(colnames(df)[i],
"(label=",
lookup$label[(match(colnames(df), lookup$code))[i]],
")")
}
}
推荐阅读
- android - 具有特定活动的多次访问的共享数据
- javascript - 如何在输入字段中使用 bootstrap 4 制作芯片
- r - 在 dplyr group_by 函数中忽略(但不删除)NA
- android - Android - sharedpreferences 数据正在与 apk 一起上传到 Play 商店
- javascript - Firebase 事务未更新/返回 Null
- autodesk-viewer - 如何在 Autodesk-viewer 中设置元素的透明性?
- android - 如何创建 android LatLng 的边界(两点)以显示在屏幕顶部?在安卓中
- python - 如何解析包含不确定数据模式的日志文件?
- javascript - 使用 css、javascript、两个按钮 onclick() 的两个动画
- text - BCP 意外字符串数据,右截断