写入csv时出错

时间:2011-11-29 04:10:57

标签: r

我正在尝试将数据框写入csv,但它似乎在抱怨,因为列包含列表。

我希望能够访问此数据框并在以后将其调用到R中。我不在乎如何完成这个(保存为文本文件等)。这是一个相当大的数据集n = 182305。有任何想法将它写入一个我可以很快读入R的文件(我没有与csv文件结合)

DATA Frame&我试过的代码

DF2<-structure(list(word = c("3-D", "4-F", "4-H'er", "4-H", "A battery", 
"a bon march"), pos.code = c("AN", "N", "N", "A", "h", "v"), 
    pos = list(c("A", "N"), "N", "N", "A", "h", "v"), noun = list(
        TRUE, TRUE, TRUE, FALSE, FALSE, FALSE), plural = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), noun.phrase = list(
        FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), verb.usually.participle = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), transitive.verb = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), intransitive.verb = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), adjective = list(
        TRUE, FALSE, FALSE, TRUE, FALSE, FALSE), adverb = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, TRUE), conjunction = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), preposition = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), interjection = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), pronoun = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), definite.article = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), indefinite.article = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), nominative = list(
        FALSE, FALSE, FALSE, FALSE, FALSE, FALSE)), .Names = c("word", 
"pos.code", "pos", "noun", "plural", "noun.phrase", "verb.usually.participle", 
"transitive.verb", "intransitive.verb", "adjective", "adverb", 
"conjunction", "preposition", "interjection", "pronoun", "definite.article", 
"indefinite.article", "nominative"), row.names = c(NA, 6L), class = "data.frame")

write.table(DF2, file = "mobyPOS.csv", sep = " ", col.names = TRUE,qmethod = "double")

我收到错误消息:

> write.table(DF2, file = "mobyPOS.csv", sep = " ", col.names = TRUE,qmethod = "double")
Error in write.table(x, file, nrow(x), p, rnames, sep, eol, na, dec, as.integer(quote),  : 
  unimplemented type 'list' in 'EncodeElement'

3 个答案:

答案 0 :(得分:15)

这只是为了解决列表作为评论中提到的数据框中的列的问题。

在示例数据的特定实例中,列表“必需”的唯一位置是DF2$pos中的第一个元素,它是长度为2的向量。可以使用以下代码删除它:

DF2$pos[[1]] <- paste(DF2$pos[[1]],collapse = "")
newDF <- as.data.frame(lapply(DF2,unlist))

通常,数据框的隐喻是行对应于案例或观察单位,而列对应于变量。此外,这个比喻认为特定的观察单位每个变量只有一个值。从这个意义上说,它与矩阵相同,只有它可以存储不同类的列。

显然,正如你所发现的,R允许你打破这个隐喻。这样做是否是一个好主意的问题将是域和数据特定的。并非每个数据集都完全符合数据框架的隐喻;有时你会有一个变量,你测量的“值”不会轻易地折叠成单个表达式。

您可以选择:在您的情况下,使用newDF代替每次访问该值时可能需要使用字符串解析(strsplit等)。这有时可能很尴尬,它可能不完全适合您的数据心理模型。

另一方面,R的大部分内容都是以遵循数据框隐喻的方式存储在数据框中的内容构建的。正如您在write.csv中发现的那样,如果您不遵守这些期望,R的某些部分(实际上,很多部分)将不会按您期望的方式运行。这还需要额外的工作和尴尬。

根据我的经验,通常最好牺牲您对数据应该如何构建的先入为主的想法的纯度,而是尽力以某种方式将其纳入数据框架。至少,该路线涉及 less 为我工作。但没有什么是完美的。

但正如我在开头所说的那样,这将是非常具体的数据和领域。 YMMV。

答案 1 :(得分:7)

尝试

save(DF2, file = "mobyPOS.Rdata")

请注意,您不必使用扩展名“Rdata”,但它或“RData”似乎是惯例。

然后,您可以使用

重新加载数据
load("mobyPOS.Rdata")

请注意,这与阅读外部文件格式不同,您通常会执行类似

的操作
your_object <- read.csv(...)

使用load命令,它直接加载对象,以便在执行load命令后,DF2对象将在那里。

答案 2 :(得分:-1)

也许转换为字符然后保存? DF2$pos <- as.character(DF2$pos)

相关问题