complete.cases出现问题:参数的类型无效(列表)

7
我收到了以下错误信息:
“complete.cases(dt)中的错误:无效的参数类型(列表)”
在数据框上使用“complete.cases”以前从未遇到过此消息。
调用“class(dt)”返回“data.frame”,因此不存在问题。
“dt”相对较大——800,000个观测值,包含90个变量。
在其他数据框上进行类似操作时没有出现任何问题。
有人知道可能是什么问题吗?

3
另外,尝试执行“ str(dt) ”。 如果您的列中包含“ list”对象,则“ complete.cases”将无法工作。 - hrbrmstr
@hrbrmstr请将此评论添加为答案。我遇到了相同的问题,正如你所指出的那样,我在data.frame中有列表对象。 - zx8754
3个回答

5

我也遇到了同样的问题。正如@hrbrmstr所指出的那样,这个数据框包含了列表对象。在我的情况下,它是一个列表的数据框。
我使用以下命令将这个数据框转换为一个实际的数据框:

DF <- data.frame(matrix(unlist(DF), nrow=nrow(DF)),stringsAsFactors=FALSE)

使用complete.cases对此进行操作。

1

我曾经遇到过同样的问题,@hrbrmstr在原问题上的评论给了我很大的帮助。为了让那些偶然遇到这个问题的人受益,我将答案与代码一起发布。

所涉及的数据集x中有一个或多个变量的类型是列表,导致出现以下错误信息:

Error in complete.cases(x) : invalid 'type' (list) of argument

通常,您可以使用str()来快速预览数据框中的变量类型。但是,在我的情况下,我有一个由2,431个变量组成的数据框(长和宽的数据框),因此使用str()的效果有限。相反,我使用方便的sapply()代码来获取我的数据框中所有类别的表格:

table(as.character(sapply(x, class)))
# output:
c("ordered", "factor")      character         list         logical          numeric 
             1                   69            1            2225              136 

请注意我们的数据框中有一个类型为list的变量。


解决方案

在下面的代码片段中,我们识别任何类型为list的变量,并将其从x中删除。我们再次使用table()来验证我们的数据框现在不再包含任何列表变量:

is_list <- sapply(x, is.list)
x <- x[, !is_list]
table(as.character(sapply(x, class)))

请执行complete.cases()函数:
x <- x[complete.cases(x), ]

请确保代码可重现,否则就与现有答案和评论无异。 - zx8754

0

我也遇到了同样的错误。问题在于其中一个data.frame实际上是一个sf对象。我必须使用st_drop_geometry删除其几何信息,以将其转换为常规的data.frame


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接