我得到了一列标记的值。让我们称它为国家。 当我运行时:
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"
的步骤是:
- 获取列
Country
的"labels"
; - 获取标签向量的
"names"
; - 提取与索引向量相对应的名称,向量
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]