R - String列被视为整数

时间:2016-07-22 15:16:05

标签: r string csv typeof

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

其中一列是" 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会导致所有值的一长行....

我做错了什么????我对这些东西不熟悉,我真的不知道该怎么办......

感谢!!!

1 个答案:

答案 0 :(得分: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"