R apply error-as.matrix.data.frame()中的错误
我遇到了一个令人困惑的错误。 我正在使用以下函数删除任何列中包含NA观测的数据帧的行R apply error-as.matrix.data.frame()中的错误,r,apply,R,Apply,我遇到了一个令人困惑的错误。 我正在使用以下函数删除任何列中包含NA观测的数据帧的行 ##### removes NA'd rows from a dataFrame wipeNArows<-function(X){ rowsToDelete<-unique(unlist(apply(apply(X,2,is.na),2,which))) if (length(rowsToDelete)>0){ return (X[-rowsToDelete,]) }
##### removes NA'd rows from a dataFrame
wipeNArows<-function(X){
rowsToDelete<-unique(unlist(apply(apply(X,2,is.na),2,which)))
if (length(rowsToDelete)>0){
return (X[-rowsToDelete,])
}
else{
return (X)
}
}
感谢您的回复,对我来说很好,但为什么不使用
?完成。案例
testFrame[complete.cases(testFrame),]
x y z
2 10 8 13
3 11 16 18
4 11 7 7
6 8 8 14
7 9 11 11
8 12 11 5
9 10 7 4
10 7 12 9
11 10 13 11
12 9 12 10
13 10 5 8
14 13 5 8
15 11 5 5
18 13 14 7
19 2 13 8
identical(testFrame[complete.cases(testFrame),], wipeNArows(testFrame))
[1] TRUE
对我来说很好,但是为什么不使用
?complete.cases
testFrame[complete.cases(testFrame),]
x y z
2 10 8 13
3 11 16 18
4 11 7 7
6 8 8 14
7 9 11 11
8 12 11 5
9 10 7 4
10 7 12 9
11 10 13 11
12 9 12 10
13 10 5 8
14 13 5 8
15 11 5 5
18 13 14 7
19 2 13 8
identical(testFrame[complete.cases(testFrame),], wipeNArows(testFrame))
[1] TRUE
如果没有问题数据,我只能建议使用不同的函数
wipe_na_rows <- function(X){
X[!apply(X, 1, function(x) any(is.na(x))),]
}
如果没有问题数据,我只能建议使用不同的函数
wipe_na_rows <- function(X){
X[!apply(X, 1, function(x) any(is.na(x))),]
}
wipe_na_行hmm谢谢回复,
不知道complete.cases函数。但这又是一个错误
Error in complete.cases(dFrame) : not all arguments have the same length
-->似乎在某种程度上解决了这个问题
有问题的数据框的问题在于它包含一个带有日期的POSIXlt对象列。显然,完整的案例和应用内部工作并不能很好地处理这个问题。解决方法是使用strftime转换为角色,然后使用strftime返回
谢谢,嗯,谢谢你的回复,
不知道complete.cases函数。但这又是一个错误
Error in complete.cases(dFrame) : not all arguments have the same length
-->似乎在某种程度上解决了这个问题
有问题的数据框的问题在于它包含一个带有日期的POSIXlt对象列。显然,完整的案例和应用内部工作并不能很好地处理这个问题。解决方法是使用strftime转换为角色,然后使用strftime返回
谢谢,另一种解决问题的方法是na。省略
na.omit(testFrame)
x y z
2 7 11 11
3 12 10 10
4 13 10 9
6 11 10 12
7 13 14 8
8 7 9 7
9 8 11 12
10 5 10 7
11 5 15 9
12 7 13 9
15 15 8 9
16 13 7 15
17 5 10 12
18 9 8 6
20 18 7 6
另一种解决问题的方法是na.omit
na.omit(testFrame)
x y z
2 7 11 11
3 12 10 10
4 13 10 9
6 11 10 12
7 13 14 8
8 7 9 7
9 8 11 12
10 5 10 7
11 5 15 9
12 7 13 9
15 15 8 9
16 13 7 15
17 5 10 12
18 9 8 6
20 18 7 6
一般情况下,如果您的数据中没有na,那么正如Aditya Sihag所建议的,问题可能是您的数据之一。frame列的数据类型可能是对象列表,例如list或POSIXlt对象。您可以对其进行强制转换,也可以仅在柱上使用lappy。但是,在应用lapply之前,再次确保列数据类型不是list或POSIXlt,如果是,则仅强制转换它。一般情况下,如果数据中没有na,那么正如Aditya Sihag所建议的,问题可能是数据之一。frame columns的数据类型可能是对象列表,例如list或POSIXlt对象。您可以对其进行强制转换,也可以仅在柱上使用lappy。但在应用lappy之前,再次确保列数据类型不是list或POSIXlt,如果是,则直接强制转换它。能否提供一个示例,说明它不起作用,而不是起作用的示例?我建议在函数开头插入browser()
。这样,您就可以逐步检查代码,检查每个元素并查找错误。您能否提供一个示例,说明它在哪里不起作用,而不是一个起作用的示例?我建议在函数的开头插入browser()
。这样,你就可以一步一步地检查你的代码,检查每一个元素并找出错误。很好,这不需要重新转换。很好,这不需要重新转换