我有以下数据:
d1 <- c(-10,2,3,4,5,6, NA, NA, NA);
d2 <- c(1,2,3,4,5,6,7, NA, NA);
d3 <- c(1,2,3,4,5,6,700, 800, 900);
d <- rbind(d1, d2, d3); d <- data.matrix(d)
我现在想测量d(或每个参与者)每行的偏度。我知道矩包的函数偏度(x),但是,似乎存在问题。我尝试了以下代码:
for (i in 1:nrow(d)){
skew[i] <- as.numeric(skewness(d[i]))
}
你知道什么是错的吗?非常感谢!
答案 0 :(得分:2)
使用apply
:
apply(d, 1, skewness, na.rm =TRUE)
for
循环的固定版本:
skew <- vector("numeric", nrow(d)) # first pre allocate to hold the result
for (i in 1:nrow(d)){
skew[i] <- skewness(d[i, ], na.rm=TRUE) # your matrix indexing was wrong
}
setNames(skew, rownames(d)) # just for names
请注意,您的矩阵索引完全错误,并且当矩阵中存在NA
时,您需要将na.rm=TRUE
设置为跳过它们,请阅读?skewness
。我更喜欢使用apply
而不是for
循环,请阅读?apply
。
答案 1 :(得分:0)
您也可以使用:
colSkewness(d)