首页 > 解决方案 > 将值切换到新列中的标签

问题描述

我得到了一列标记值。姑且称之为国家吧。当我运行时:

attr(dat[["Country"]], "labels")

我得到下一张桌子:

USA      Germany       France           UK        Spain        India Saudi Arabia 
  1            2            3            4            5            6            7 

现在我得到了一列未标记的新 int 值。让我们称之为新国家。我想将这些 int 值更改为原始 Country 列的标签。换句话说,我想以一种有效的方式摆脱这种情况......

3 2 2 1 5 4

对这个……

法国 德国 德国 美国 西班牙 英国

标签: rlabel

解决方案


问题是数据框有一列,Country,具有属性"labels"集。反过来,这个只是一个向量的属性具有属性"names"集。所以得到的步骤"names""labels"

  1. 获取"labels"列的Country
  2. 获取"names"标签向量的 ;
  3. 提取与索引向量向量对应的名称i

首先读取发布的数据。

nms <- scan(text = "USA Germany France UK Spain India 'Saudi Arabia'",
            what = character())
i <- scan(text = "3 2 2 1 5 4")

现在创建一个数据集示例。

labs <- setNames(1:7, nms)
dat <- data.frame(Country = sample(letters, 7))
attr(dat[["Country"]], "labels") <- labs

并按照上述步骤提取问题的要求。

labsCountry <- attr(dat[["Country"]], "labels")
names(labsCountry)[i]
#[1] "France"  "Germany" "Germany" "USA"     "Spain"   "UK"

或单线:

names(attr(dat[["Country"]], "labels"))[i]
#[1] "France"  "Germany" "Germany" "USA"     "Spain"   "UK"

要查看这不依赖于标签的值,请创建第二个示例。

labs2 <- setNames(101:107, nms)
attr(dat[["Country"]], "labels") <- labs2

尽管"labels"它们不同,但相同的说明有效:

attr(dat[["Country"]], "labels")
#         USA      Germany       France           UK        Spain        India Saudi Arabia 
#         101          102          103          104          105          106          107

labsCountry <- attr(dat[["Country"]], "labels")
names(labsCountry)[i]

推荐阅读