【问题标题】:R - String column is considered as integerR - 字符串列被视为整数
【发布时间】:2016-11-26 13:36:38
【问题描述】:

我在使用read.csv.csv 文件读入数据框newdata 时遇到了一个非常奇怪的问题。

其中一列是“Site”,应该是字符串:

  • 当我使用 View 查看数据框时,我发现它包含诸如“www.google.com”、“www.facebook.com”等值。
  • 如果我检查typeof(newdata$Site) 的列类型是什么,我得到的结果是“整数”。
  • 如果我使用table(newdata$Site) 检查每个字符串的出现频率,并将此表写入.csv 文件,我会为每个值得到一个适当的频率表,并带有额外的数值(例如,一列没有名称与数值,一列名为 var1 与网站字符串(例如“www.google.com”)和一列名为 Freq 与频率)。

我尝试创建一个将多个值合并为一个的新列(例如“www.google.com”和“www.google.co.uk”到“Google”),我使用了grepl,然后我意识到R 将原始列不视为字符串...

当我尝试仅通过 a = newdata[,"Site"] 对该列进行子集化时,我明白了 a 是类型因子...将其写入.csv 会导致所有值的一长行....

我做错了什么???我对这些东西有点陌生,我真的不知道该怎么办......

谢谢!!!

【问题讨论】:

  • 为了大家,尽量不要将文本格式化为一堆单词。并且看看str(newdata)看看你的专栏是一个因素,然后搜索一下因素(第一步:?factor
  • 你有没有读过手册?可能不是。没人做到。他们只是先在这里发帖。 help(read.csv)。具体来说,stringsAsFactors 参数。
  • 嘿@RichardScriven - 我不知道这与从 csv 读取有关...但我感谢您的关注 :)

标签: r string csv typeof


【解决方案1】:

你已经挖了很多了。您知道您的列 Site 是一个因素,它具有 typeof() 整数。

为避免在读取数据时将字符串编码为因素,请使用:

read.csv(..., stringsAsFactors = FALSE)

因子存储为整数,其中整数给出了其级别的位置。试试:

x <- gl(3,2,labels=letters[1:3])
#[1] a a b b c c
#Levels: a b c

typeof(x)
#[1] "integer"

levels(x)
#[1] "a" "b" "c"

levels(x)[x]   ## equivalent to "as.character(x)", but more efficient
#[1] "a" "a" "b" "b" "c" "c"

【讨论】:

  • 既然我们现在有现场文档,让我们链接到它 (stackoverflow.com/documentation/r/1104/…)
  • 我只是复制并粘贴了链接。但我并没有要求你这样做。只是添加它作为补充。 :)
  • 非常感谢@ZheyuanLi!既是为了解决方案,也是为了教学态度!
猜你喜欢
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多