【发布时间】:2018-09-22 07:35:26
【问题描述】:
目前,我有一个大型数据框,我不一定知道所有行的名称,它们作为字符串存储在第一列中(在这种情况下,是提供某些数据的国家/地区的名称)。我需要将这些数据取出来做其他事情,而我只是碰巧知道前 56 行包含我需要的所有名称,每行恰好一次。
我想我可以像这样使用 for 循环迭代这些名称的向量:
dat=read.csv("foo.csv",header=TRUE)
Names=character(56)
for (i in 1:56){Names[i]=dat[[i,1]]}
但结果是我在 Names 中得到了一堆整数。当我运行str(dat$NAMES) [我感兴趣的专栏] 时,我得到以下信息:
Factor with 56 levels "Angola", "Benin",...: 1 3 4 5 15 27 32 33 39 40 ...
这些似乎是我得到的整数,但我一生都无法弄清楚如何获取字符串。
【问题讨论】:
-
试试
Names <- as.character(dat[1:56, 1])。或者在read.csv中设置stringsAsFactors = FALSE。 -
stringsAsFactors=FALSE 非常棒,非常感谢!
-
完美。然后只需执行
Names <- dat[1:56, 1],无需循环。或Names <- unique(dat[, 1])以确保不超过(或少于)56 个国家/地区。 -
@markus,您绝对正确地使用
read.csv( ,stringsAsFactors=FALSE)来避免这些因素。并且对于您在现有 data.frame 中有 Factors 的情况下建议使用as.character()更正。为什么不以@PeaceBlaster 可以复制/粘贴/运行的形式作为答案发布,然后他可以接受它作为答案? -
还请注意,像在
dat[[i,1]]中那样使用双重[[是不正确的。dat[i, 1]是正确的方式。