coc*_*mat 0 for-loop if-statement r dataframe
我想从数据帧中删除负值,然后我需要分别计算每行的平均值(每行正值的平均值)。我有这样的警告:
在错误
[<-.data.frame
(*tmp*
,I,J,=值NULL):替换具有零长度
我该如何解决这个问题?
for (i in 1:1000) {
for(j in 1:20){
if (dframe[i,j]<=0) dframe[i,j]<-NULL
j=j+1
}
i=i+1
}
Run Code Online (Sandbox Code Playgroud)
我想补充一点,没有必要编写for循环,您可以设置:
dframe[dframe < 0] <- NA
Run Code Online (Sandbox Code Playgroud)
当dframe < 0
dframe小于零时,As 给出逻辑索引TRUE,可用于索引dframe并将TRUE值替换为NA。
@MrFlick解释了使用NA而不是NULL的方法,以及在计算每行均值时如何忽略NA值:
rowMeans(dframe, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
编辑以回答问题re:产生NaN的rowMeans以及如何删除:
NA是“不可用”,并且是缺失值指示符,而NaN是“非数字”,当无法通过数字定义算术运算的结果(例如0/0)时可以生成。我看不到您的dframe值,但我想这是在设置na.rm = TRUE时所有行值均为NA时采用row手段的结果。参见均值(c(NA,NA,NA),na.rm = TRUE)与均值(c(NA,NA,NA),na.rm = FALSE)之间的差异。您可以保留NaN或决定在所有行值均为负且已被NA取代时如何定义行均值。
要仅考虑非NaN值,可以使用而不是NaN子集!is.nan
,请参见以下示例:
mea <- c(2, 4, NaN, 6)
mea
# [1] 2 4 NaN 6
!is.nan(mea) # not NaN, output logical
# [1] TRUE TRUE FALSE TRUE
mea <- mea[!is.nan(mea)]
# [1] 2 4 6
Run Code Online (Sandbox Code Playgroud)
或者您可以通过设置将NaN值替换为所需的值 mea[is.nan(mea)] <- ??
归档时间: |
|
查看次数: |
14459 次 |
最近记录: |