【问题标题】:Switching values to labels in a new column将值切换到新列中的标签
【发布时间】:2020-01-29 18:22:52
【问题描述】:

我得到了一列带标签的值。姑且称之为国家吧。 当我跑步时:

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

到这个...

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

【问题讨论】:

  • 只需提取attr(dat[["Country"]], "labels")[i] where i <- c(3, 2, 2, 1, 5, 4)
  • 我试过了,但它只是再次返回数字而不是实际标签。
  • 好的,标签似乎有名字。将attr(etc) 的输出分配给labsnames(labs) 返回什么?如果它返回国家名称,则从中提取,names(labs)[i].
  • 酷!它确实返回国家名称。但是,这种方法可能仅在标签编号 (1,2,3,4,5...) 从 1 开始并且是连续的情况下才有效。
  • 不,不管标签本身如何,它都可以工作,它是由i 子集的向量(恰好是标签)的名称。如果我在答案中解释可能会更好?

标签: r label


【解决方案1】:

问题是数据框有一个列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]

【讨论】:

  • 好吧,我遇到了这个解决方案的问题。当我得到一个标记值 0 时,这不起作用,因为假设标记值从 0 开始,假设索引完成匹配。想象美国是 0 而不是 1。你知道我们如何解决这个问题吗?
  • @SarahíAguilar 在 R 中,向量是从 1 开始的。如果美国的标签是"0",它仍然是标签向量的第一个元素,代码应该可以工作。你能用一个失败的例子来编辑这个问题吗?
  • 没错。但我已经设法解决了这个问题。我所做的只是一个带有值及其标签的表,然后将其与数组值匹配。不过谢谢!
猜你喜欢
  • 2011-12-16
  • 2012-10-09
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多