将数据帧导出到R中的文本文件时出错
我试图将R中的数据帧写入文本文件,但返回到以下错误:将数据帧导出到R中的文本文件时出错,r,export,R,Export,我试图将R中的数据帧写入文本文件,但返回到以下错误: Error in if (inherits(X[[j]], "data.frame") && ncol(xj) > 1L) X[[j]] <- as.matrix(X[[j]]) : missing value where TRUE/FALSE needed 我不知道这个问题是由什么引起的。至于“缺少需要TRUE/FALSE的数据”,我只有一列包含TRUE/FALSE值,这些值都不
Error in if (inherits(X[[j]], "data.frame") && ncol(xj) > 1L)
X[[j]] <- as.matrix(X[[j]]) :
missing value where TRUE/FALSE needed
我不知道这个问题是由什么引起的。至于“缺少需要TRUE/FALSE的数据”,我只有一列包含TRUE/FALSE值,这些值都不缺少
数据帧的内容:
> str(df)
'data.frame': 776 obs. of 15 variables:
$ Age : Factor w/ 4 levels "","A","J","SA": 2 2 2 2 2 2 2 2 2 2 ...
$ Sex : Factor w/ 2 levels "F","M": 1 1 1 1 2 2 2 2 2 2 ...
$ Rep : Factor w/ 11 levels "L","NR","NRF",..: 1 1 4 4 2 2 2 2 2 2 ...
$ FA : num 61.5 62.5 60.5 61 59.5 59.5 59.1 59.2 59.8 59.9 ...
$ Mass : num 20 19 16.5 17.5 NA 14 NA 23 19 18.5 ...
$ Vir1 : num 999 999 999 999 999 999 999 999 999 999 ...
$ Vir2 : num 999 999 999 999 999 999 999 999 999 999 ...
$ Vir3 : num 40 999 999 999 999 999 999 999 999 999 ...
$ Location : Factor w/ 4 levels "Loc1",..: 4 4 4 4 4 4 2 2 2 2 ...
$ Site : Factor w/ 6 levels "A","B","C",..: 5 5 5 5 5 5 3 3 3 3 ...
$ Date : Date, format: "2010-08-30" "2010-08-30" ...
$ Record : int 35 34 39 49 69 38 145 112 125 140 ...
$ SampleID : Factor w/ 776 levels "AT1-A-F1","AT1-A-F10",..: 525 524 527 528
529 526 111 78
88 110 ...
$ Vir1Inc : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ Month :'data.frame': 776 obs. of 2 variables:
..$ Dates: Date, format: "2010-08-30" "2010-08-30" ...
..$ Month: Factor w/ 19 levels "Apr-2011","Aug-2010",..: 2 2 2 2
2 2 18 18 18 18 ...
我希望我已经提供了足够/正确的信息
非常感谢,,
Heather一个重现错误的示例。我创建一个嵌套的data.frame:
Month=data.frame(Dates= as.Date("2003-02-01") + 1:15,
Month=gl(12,2,15))
dd <- data.frame(Age=1:15)
dd$Month <- Month
str(dd)
'data.frame': 15 obs. of 2 variables:
$ Age : int 1 2 3 4 5 6 7 8 9 10 ...
$ Month:'data.frame': 15 obs. of 2 variables:
..$ Dates: Date, format: "2003-02-02" "2003-02-03" "2003-02-04" ...
..$ Month: Factor w/ 12 levels "1","2","3","4",..: 1 1 2 2 3 3 4 4 5 5 ...
agstudy的解决方案提供了一个很好的快速修复方案,但是有一个简单的替代方案/通用解决方案,您不必在数据框中指定嵌套的元素 刚从复制了以下位以获取嵌套数据。frame
dd
:
Month=data.frame(Dates= as.Date("2003-02-01") + 1:15,
Month=gl(12,2,15))
dd <- data.frame(Age=1:15)
dd$Month <- Month
ddf
现在是一个没有嵌套的data.frame。但是,它的列名仍然反映嵌套结构:
names(ddf)
[1] "Age" "Month.Dates" "Month.Month"
如果您想更改此设置(例如,在本例中,在日期之前写入似乎是多余的。
),您可以使用gsub
,以及我从Sacha Epskamp复制来删除
之前列名中的所有文本
names(ddf) <- gsub(".*\\.","",names(ddf))
names(ddf)
[1] "Age" "Dates" "Month"
或者,您可以使用jsonlite包中的“展平”函数在导出之前展平数据帧。它实现了与前面提到的其他功能相同的结果,并且更易于实现
jsonlite::展平
我想您会遇到错误,因为您的data.frame包含嵌套的data.frame names Month…@agstudy帮助文件说write.table
可以处理嵌套的数据帧。我的猜测是有什么问题,错误消息中给出的&&ncol(xj)
代码试图处理非矩阵,因此ncolxj)
返回NULL
,并且R
讨厌逻辑运算中的“NULL”。无论如何,显而易见的攻击计划是在删除候选的“坏”元素后,尝试在df
的一部分上写table
,看看哪个元素是罪魁祸首。@CarlWitthoft您可以看到我的示例。是的--看起来write.table
的文档不完整。它可以处理列表列,但不能处理嵌套列表。jsonlite::Flatte非常适合展平嵌套数据帧。但是你提供的链接已经失效了。
Month=data.frame(Dates= as.Date("2003-02-01") + 1:15,
Month=gl(12,2,15))
dd <- data.frame(Age=1:15)
dd$Month <- Month
library(devtools)
source_gist(4205477) #loads the function
ddf <- LinearizeNestedList(dd, LinearizeDataFrames = TRUE)
# ddf is now a list with two elements (Age and Month)
ddf <- LinearizeNestedList(ddf, LinearizeDataFrames = TRUE)
# ddf is now a list with 3 elements (Age, `Month/Dates` and `Month/Month`)
ddf <- as.data.frame.list(ddf)
# transforms the flattened/linearized list into a data.frame
names(ddf)
[1] "Age" "Month.Dates" "Month.Month"
names(ddf) <- gsub(".*\\.","",names(ddf))
names(ddf)
[1] "Age" "Dates" "Month"
write.table(ddf, file="test.txt")