我有一个频率交叉表,并希望rep()
使用apply()
函数为我可以使用的每个样本(A01,A02等)创建一长列数据对于均值和stdev统计。列A01,A02等中的数字是CAG的频率计数,例如, 6485计数13 CAG。
我已设法编写函数以提供正确的结果,但格式似乎不是可索引的,例如使用sumstats$A01
可获得NULL
。理想情况下,我也喜欢在输出表中反转的行和列,因此列是mean,sd等。
data <- data.frame(CAG = c(13, 14, 15), A01 = c(6485,35,132), A02 = c(0,42,56))
sumstats <- sapply(data[, 2:ncol(data)], function(x) {
data_e <- rep(data$CAG, x)
list(
mean = mean(data_e),
median = median(data_e),
sd = sd(data_e)
)
})
#Output:
#sumstats$A01
#NULL
答案 0 :(得分:1)
$
子集对于data.frame类是唯一的。如果你检查class(sumstats)
,你会发现它只是一个简单的矩阵。
只需运行sumstats <- as.data.frame(sumstats)
然后即可使用
sumstats$A01
#$mean
#[1] 13.04495
#
#$median
#[1] 13
#
#$sd
#[1] 0.2874512
这是你想要的吗?
修改强>
sumstats2 <- as.data.frame(t(sumstats))
res <- data.frame(samples, sumheight, sumstats2)
res
# samples sumheight mean median sd
#A01 A01 6652 13.04495 13 0.2874512
#A02 A02 98 14.57143 15 0.497416
答案 1 :(得分:0)
data <- data.frame(CAG = c(13, 14, 15), A01 = c(6485,35,132), A02 = c(0,42,56))
samples <- c('A01', 'A02')
sumheight <- colSums(data[ , 2:ncol(data)], na.rm=TRUE)
sumstats <- sapply(data[, 2:ncol(data)], function(x) {
data_e <- rep(data$CAG, x)
list(
mean = mean(data_e),
median = median(data_e),
sd = sd(data_e)
)
})
sumstats2 <- as.data.frame(t(sumstats))
res <- data.frame(samples, sumheight, sumstats2$mean)