matrixStats::rowQuantiles给出NAs并为多个四分位数返回相同的值

matrixStats::rowQuantiles给出NAs并为多个四分位数返回相同的值,r,R,我试图计算数据框中每一行的第一个和第三个四分位数,并将它们保存为新列。我尝试使用matrixStats::rowQuantiles,但它为包含NAs的行提供了一个NA值,即使我将NA.rm=TRUE设置为在计算之前删除NAs 我还注意到,Q1和Q3的值对于每一行都是相同的。更可能的是,我使用了错误的函数,而不是这些函数实际上是相同的,但我无法找出我做错了什么 提前谢谢 #set up data row1= c(0.001020267, 0.001114546, NA, 0.001038988,

我试图计算数据框中每一行的第一个和第三个四分位数,并将它们保存为新列。我尝试使用matrixStats::rowQuantiles,但它为包含NAs的行提供了一个NA值,即使我将NA.rm=TRUE设置为在计算之前删除NAs

我还注意到,Q1和Q3的值对于每一行都是相同的。更可能的是,我使用了错误的函数,而不是这些函数实际上是相同的,但我无法找出我做错了什么

提前谢谢

#set up data
row1= c(0.001020267, 0.001114546, NA, 0.001038988, 0.0009687599, 0.001052172, NA, NA, 0.001044239,  0.00108163)
row2=c(0.002089891, 0.002180456, 0.002083801, 0.001984546, 0.001968671, 0.002104716, 0.00191239, 0.001899664, 0.001891908, 0.001854954)
row3=c(0.004956524, 0.004559659, 0.004214533, 0.004450447, 0.004310213, 0.004535139, 0.004416997, 0.004174858, 0.004027706, 0.003959555)

df=as.data.frame(rbind(row1,row2,row3))

#apply rowQuantiles
library(matrixStats)
df$Q1=rowQuantiles(as.matrix(df[,],probs=0.25, na.rm=TRUE))
df$Q3=rowQuantiles(as.matrix(df[,],probs=0.75, na.rm=TRUE))

#creates Q1 and Q3 columns
#row1 Q1 = NA Q3 = NA
#row2 Q1 = 0.001854954 Q3 = 0.001854954
#row3 Q1 = 0.003959555 Q3 = 0.003959555

原因是
as.matrix(df[,]
df[,])
之后没有一个结束

如果我们把代码改成

rowQuantiles(as.matrix(df), probs = 0.25, na.rm=TRUE)
#     row1        row2        row3     
#  0.001029628 0.001902845 0.004184777 
OP的代码在
as.matrix
中传递
probs
na.rm
,虽然它没有显示任何错误,但不需要该参数,因此,当我们获得
rowQuantiles
时,它将默认使用
na.rm=FALSE
,并将
probs
作为默认probs,即
seq(from=0,to=1,by=0.25)

此外,无需指定
df[,]
。只需
df
即可返回整个数据集,包括所有行和列


不清楚OP为什么创建
矩阵
(使用
rbind
)然后转换为
data.frame
,然后再转换为
matrix
。默认情况下,
rbind
使用方法
rbind.matrix
,并创建一个
matrix
。因此,我们实际上不需要在data.frame和matrix之间进行任何来回转换,即

rowQuantiles(rbind(row1,row2,row3), probs = 0.25, na.rm = TRUE)
#      row1        row2        row3 
#0.001029628 0.001902845 0.004184777 

感谢您阐明了它们是如何工作的-这真的很有用!在矩阵和数据帧之间切换只是因为我的完整数据集是一个数据帧,所以我必须确保它也能工作。