【问题标题】:BASIC - R Data type issue; type integer and contains many 'levels'?BASIC - R 数据类型问题;输入整数并包含许多“级别”?
【发布时间】:2019-04-07 02:38:07
【问题描述】:

我是 R 语言的新手,目前我很难理解以下内容:

我正在加载一个 CSV 文件。此 CSV 文件包含两列。第一列是唯一 ID。第二列名为“内容”。内容列基本上是来自特定 URL 的所有可读文本。

如果我打印第二列第一行的内容,我会得到以下输出。

Text[1:1,2:2]
[1] Autoservice Hofra  Home \xa0 Home Contact \xa0 Autoservice Hofra \xa0 Home Contact Autoservice Hofra Welkom op onze website \xa0 \xa0LASSA BANDEN DEALER \xa0 Wanneer is mijn auto toe aan een onderhouds inspectie Iedere auto heeft een instructieboekje Dat ligt meestal in het dashboardkastje van uw auto In dat boekje staat hoe en wanneer u de auto onderhoudt Autoservice Hofra Albert Einsteinweg 12 6045 GX Roermond Tel 0654965305 Kleine en grote beurt Bij Autoservice Hofra kun je terecht voor een grote en kleine beurt voor de zomer en winter checks maar ook airco onderhoud Zo zorgen we dat je niet alleen veilig en comfortabel de weg op gaat maar ook nog eens extra lang plezier hebt van je auto \xa0 We vervangen motorolie en het oliefilter vullen de ruitenvloeistof koelvloeistof en remvloeistof bij en houden rekening met de milieutoeslag Een groot deel van de checks die bij een APK worden gedaan komen ook bij de grote beurt aan bod Het is daarom voordelig om deze te combineren De motormanagement van de auto wordt zorgvuldig uitgelezen met diagnose apparatuur waardoor storingen en andere meldingen aan het licht komen \xa0 \xa0 \xa0 Airco Check \xa0Houdt de airco uw auto op de juiste temperatuur Ontwasemt de airco de autoruit slecht En blaast hij nog frisse lucht Doe de Airco Check Ook als het geen zomer is Wij voeren alle voorkomende onderhoudswerkzaamheden uit aan uw auto voor een zeer scherpe prijs Bij een duurdere reparatie wordt er te allen tijde overleg gepleegd met u Daarnaast zijn we in het bezit van de juiste kennis en gereedschappen om alle voorkomende reparaties uit te voeren \xa0\xa0Laat de werkzaamheden uitvoeren wanneer u dat uitkomt Home \xa0 \xa0 Contact
5432 Levels:  ...

如果我打印第二列第一行的类型,我会得到类型 integer

typeof(Text[1:1,2:2])
[1] "integer"

有人可以解释一下为什么特定列在包含字符时具有“整数”类型。我也对 '5432 levels: ...' 部分感到困惑。 R中的“级别”是什么意思?

最后,我要做的是将“内容”列的每一行转换为字符,以便我可以应用例如删除所有长度为

SText <- subset(Text, nchar(as.character(content)) > 200)

现在我得到错误:

Error in type(Text[1:1, 2:2]) : could not find function "type"

我该如何解决这个问题?任何帮助和信息将不胜感激!

【问题讨论】:

  • 该列已作为因子而不是字符导入。您可以通过在 read.csv() 函数中指定 stringsAsFactors 参数来明确告诉 R 不要将字符列视为因素。整数类型很可能是因为该列被存储为因子。
  • 如果您是 R 新手,请开始使用 class() 而不是 typeof()。后者不会告诉您对象的行为方式。
  • 这里有一些关于因素的更多背景知识,我花了一段时间才理解。在许多情况下,使用stringsAsFactors = FALSE 会更简单。在未来,因素可能非常有用,例如,如果您想对绘图的类别进行排序(而不是按字母顺序)。 stat.berkeley.edu/~s133/factors.html
  • 在此处添加其他答案。您有时也可以通过在导入数据时指定 na.strings 来避免这种情况。

标签: r integer r-factor levels


【解决方案1】:

在后台,出于效率原因,因子以数字形式存储。默认情况下,read.csv() 将字符列作为因子读取(这在统计世界中是有意义的),因此它是一个整数。您应该在read.csv() 上使用stringsAsFactors = FALSE 来获取字符向量(不是因子)。

5432 levels: ... 指的是该列中包含的因子的水平。一个因素总是跟踪它所有的原始可能水平。所以即使你只提取一个元素,它仍然会包含关卡的所有信息。

typeof() 不是您需要了解对象内容的函数。如doc 中所述,typeof() 返回对象的内部表示。因此你得到了integer

你应该试试class()

【讨论】:

    【解决方案2】:
    1. 通过指定 stringsAsFactors=FALSE 读取您的 csv

      DF <- read.csv("/Users/mypath/finalTotal.csv", stringsAsFactors=FALSE) DF2 <- read.csv("/Users/mypath/model.csv", stringsAsFactors=FALSE)

    2. \xa0DFText 中 Latin1 (ISO 8859-1) 中的不间断空格。您应该用空格替换它。

      DFText[,2] = gsub("\xa0", " ", DFText[,2])

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多