首页 > 解决方案 > 创建循环以将标签添加到列:库(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  

标签: rfor-loopif-statementlabelhmisc

解决方案


如果您特别想使用循环,这种方法会给出您描述的输出:

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 查看器中检出:

RStudio 对象查看器的屏幕截图,根据需要显示带有 Hmisc 标签的变量。

像其他几个回答者和评论者一样,我最初认为您想将“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]],
                              ")")
  }
}

推荐阅读