r语言 - 将值切换为新列中的标签



我得到了一列标记的值。让我们称它为国家。 当我运行时:

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

我得到下一张表:

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

现在我得到了一列未标记的 int 值。我们称之为新国家。我想将这些 int 值更改为原始国家/地区列的标签。换句话说,我想以一种有效的方式从这里开始......

3 2 2 1 5 四

对此...

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

问题是数据框有一个列,Country,并设置了属性"labels"。反过来,此属性只是一个向量,具有"names"设置的属性。因此,获取"labels""names"的步骤是:

  1. 获取列Country"labels";
  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]

最新更新