我正在分析来自公开数据库的微阵列数据,我的输出是一个对数比矩阵,将实验数据与对照进行比较。我发现我的一个列中填充了NaN
值,因为此处理没有相应的控件。我的数据框(fc_initial
)尺寸为9049 x 647。
> dim(fc_initial)
[1] 9049 647
由NaN填充的列是第580列
head(fc_initial[,580])
# [1] NaN NaN NaN NaN NaN NaN
summary(is.nan(fc_initial[,580]))
# Mode TRUE NA's
# logical 9049 0
当我尝试使用apply
检查所有列时,R会错误地返回此列的所有FALSE
。
fc_num <- apply(fc_initial, 2, is.nan)
summary(fc_num[ ,580])
# Mode FALSE NA's
# logical 9049 0
我已使用fc_initial
和fc_num
的视图直观地确认了这一点,我已经仔细检查过我正在使用which()
查找正确的列。
which(fc_num, arr.ind = TRUE)
# row col
which
不会返回显示为TRUE
的单元格。
我错过了什么?为什么R为FALSE
的一列值返回TRUE
列,我已在视觉上确认为<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="e:\path_tolog\WebTrace.svclog" /> <-- Path to the log file
</listeners>
</source>
</sources>
</system.diagnostics>
?
答案 0 :(得分:0)
调用apply
时,数据框被强制转换为矩阵。如果有任何字符列,则整个数据框被强制转换为字符矩阵,并且所有NaN
都转换为NA
df_1 <- data.frame(a=c("a","b","c"), b=c(NaN, NaN,NaN))
df_2 <- data.frame(a=c(1,2,3), b=c(NaN, NaN,NaN))
as.matrix(df_1)
a b
[1,] "a" NA
[2,] "b" NA
[3,] "c" NA
as.matrix(df_2)
a b
[1,] 1 NaN
[2,] 2 NaN
[3,] 3 NaN
答案 1 :(得分:0)
即兴创作@cactusWoman和@joran评论:
## this gives count of nan's by column for your data.frame
sapply(fc_initial, function(y) sum(length(which(is.nan(y)))))