【问题标题】:R type int / char confusion in a dataframe数据框中的 R 类型 int / char 混淆
【发布时间】:2020-04-05 22:57:15
【问题描述】:

我有一个 DataFrame,我从中创建了另一个 DataFrame。在某个地方,事情变得一团糟,但我不确定在哪里以及如何解决它。

代码在第一个数据帧上运行,所以我认为这是某种类型不匹配?我需要以某种方式将字段转换回字符串吗?

##creating the second data frame

adat2 <- data.frame(id=character(), Title=character(), Domain=character(), lemtext1=character(), Language=character(), day=character())


##copying from the first one, whilst splitting rows into multiple rows based on lemtext

for (row in 1:nrow(adat1)) {
    splitlines <- strsplit(adat1$lemtext[row], ", |\\. |: |; ")[[1]]
    for (row2 in 1:NROW(splitlines)){
        adat2 <- add_row(adat2, id=adat1$id[row], Title=adat1$Title[row], Domain=adat1$Domain[row], lemtext1=splitlines[row2], Language=adat1$Language[row], day=adat1$day[row])
    }
}

##trying to work with the new dataframe

tokens <- space_tokenizer(adat2$`lemtext2`[which(((adat2$Domain=="index.hu") |
                                                   (adat2$Domain=="hvg.hu") | (adat1$Domain=="24.hu") | (adat1$Domain=="444.hu")) & 
                                                   (adat2$day>=as.Date("2018-10-13")) & (adat1$day<=as.Date("2019-10-13")))])

收到错误消息

adat1 输出:

https://www.pastiebin.com/5df253f6b79aa

【问题讨论】:

  • 我们可以使用代码,因为没有数据。可以分享adat1吗?您可以使用dput(adat1) 来执行此操作,如果它很大,您可以使用dput(head(adat1, 20))
  • 您好,我已将 doutput 发布到 pastiebin.com/5df253f6b79aa

标签: r dataframe types char int


【解决方案1】:

adat2 中,一切都是一个因素。这与您创建adat2 的方式有关。您需要将stringAsFactors = FALSE 添加到data.frame() 函数中。

adat2 <- data.frame(id = character(),
                    Title = character(),
                    Domain = character(),
                    lemtext1 = character(),
                    Language = character(),
                    day = character(),
                    stringAsFactors = FALSE)

如果你现在想知道你有什么样的列。您应该str(adat2) 或您可以使用的每列,例如class(adat2$id).

【讨论】:

  • 感谢您的回复!有什么方法可以将 adat2 转换为正确的格式,而不必再次运行整个代码?我正在处理大量数据,而我的循环解决方案效率极低(运行了 2 天,哈哈)
  • 哇,废话!您可以使用adat2$id &lt;- as.character(adat2$id) 转换每一列,但我不知道这是否更快。也许看看data.table 是个好主意。这是为大数据和高效做事而设计的。
  • 循环总是很慢,或者实际上在循环中增长的东西很慢。如果你想保持循环,也许你可以在循环之前定义adat2的大小。
  • 非常感谢!转换位听起来应该可以解决问题。我绝对不想继续使用循环的解决方案,但我真的不知道如何以更优雅的方式做我想做的事情......我会转换并回来!再次感谢您
猜你喜欢
  • 2015-08-26
  • 2017-12-24
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多