R返回数字而不是字符串

时间:2018-04-20 17:50:39

标签: r

为什么c(...)会返回一个数字而不是下面示例中的字符串?

> Location$NamePrint
[1] Burundi
273 Levels: Afghanistan Africa ...

> ParentLocation$NamePrint
[1] Eastern Africa
273 Levels: Afghanistan Africa ...

> c(Location$NamePrint, ParentLocation$NamePrint)
[1] 36 71

这些数字是各级别字符串的位置?

我的目标是使用c(Location$NamePrint, ParentLocation$NamePrint)

创建一个包含这两个元素(它们的字符串值)的向量

2 个答案:

答案 0 :(得分:7)

因为它是factor。例如:

x <- as.factor("a")
c(x)

# [1] 1

要解决此问题,我们可以对待x as.character

x <- as.character("a")
c(x)

# [1] "a"

正如@joran所提到的,forcats中有一个方便的功能,forcats::fct_c()

有关其他信息,请参阅?c并阅读详细信息部分:

  

请注意,因子仅通过其内部整数代码处理;一个提案一直在使用:

x <- as.factor("a")
y <- as.factor("b")

c.factor <- function(..., recursive=TRUE) unlist(list(...), recursive=recursive)

c.factor(x, y)

# [1] a b
# Levels: a b

答案 1 :(得分:2)

对象的structurestr())会显示它们是因素。

demo1 <- as.factor("Burundi")
demo2 <- as.factor("Eastern Africa")
str(demo1)

见:

> str(demo1)
 Factor w/ 1 level "Burundi": 1

所以当你连接它们时,会发生这种情况:

> c(demo1, demo2)
[1] 1 1

如果您想将它们带入带有文字的向量中,请使用as.character

> c(as.character(demo1), as.character(demo2))
[1] "Burundi"        "Eastern Africa"

甚至更好,对原始载体这样做,例如:

demo1 <- as.character(demo1)