【问题标题】:Extract column of strings from dataframe in R when they are "factors"当它们是“因素”时,从 R 中的数据框中提取字符串列
【发布时间】: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] 是正确的方式。

标签: r string dataframe


【解决方案1】:

首先的问题是read.csv 在 OP 认为它是字符向量时在第一列中产生了一个因子。

我们可以在将数据加载到 R 设置 stringsAsFactors = FALSE in read.csv 时避免这种情况。

dat <- read.csv("foo.csv", header = TRUE, stringsAsFactors = FALSE)
#extract the first 56 entries from the first column
Names <- dat[1:56, 1]

如果stringsAsFactors = FALSE 不是一个选项,则使用as.character 将该向量转换为字符类型。

dat <- read.csv("foo.csv", header = TRUE, stringsAsFactors = TRUE)
#extract the first 56 entries from the first column
Names <- as.character(dat[1:56, 1])

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2017-01-25
    • 2021-12-26
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多