我有以下列表:
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> a = numpy.array([[1, 1, 2, 3, 4, 5, 6],
... [1, 11, 12, 13, 14, 15, 16],
... [3, 22, 23, 24, 25, 26, 27]])
>>> stride = 2
>>> numpy.array(map(lambda row: row[row[0]:row[0] + stride + 1], a))
array([[ 1, 2, 3],
[11, 12, 13],
[24, 25, 26]])
我的目的是获取不同的数据框,其中包含列表中每个元素的某些列的均值和sd。尝试使用colSds获取sd时出现了第一个问题。
d1<-data.frame(y1=c(34,56,89,45),y2=c(42,54,68,25),y3=c(253,547,586,258),y4=c(233,537,554,258))
d2<-data.frame(y1=c(37,26,14,67),y2=c(65,54,43,23),y3=c(243,577,516,125),y4=c(267,527,567,368))
d3<-data.frame(y1=c(35,24,14,58),y2=c(65,51,43,21),y3=c(267,527,567,368),y4=c(243,577,516,125))
d4<-data.frame(y1=c(34,23,13,36),y2=c(65,55,44,24),y3=c(233,537,554,258),y4=c(253,547,586,258))
lst <- list(d1,d2,d3,d4)
一旦我运行此脚本,我就会收到以下错误:
colVars中的错误(x,rows = rows,cols = cols,...): 参数'x'必须是矩阵或向量。
平均功能仍然有效,所以我有一个包含所有方法的新列表(W.mean)
现在我想用手段创建separete data.frame(还包括de sd,但我需要让它工作)
W.mean<-list()
W.sd<-list()
for (i in ids){
W.mean<-lapply(lst, function(i) colMeans(i[,c(1,2,4)],na.rm=TRUE))
W.sd<-lapply(lst, function(i) colSds(i[,c(1,2,4)],na.rm = TRUE))
}
但是我收到一个新错误:t.default中的错误(W.mean [[i]]):参数不是矩阵
有人可以帮我修复错误吗? TAHNKS
答案 0 :(得分:0)
原因是因为colSds
适用于matrix
而不是data.frame
。根据{{1}}
Description
描述 - a中每行(列)的标准差估计值 基质
?colSds
colVars中的错误(x,rows = rows,cols = cols,...):参数'x' 必须是矩阵或向量。
因此,将'data.frame'转换为'matrix',它应该可以正常工作
lapply(lst, function(i) colSds(i[, c(1,2, 4)], na.rm = TRUE))
此外,
中的lapply(lst, function(i) colSds(as.matrix(i[, c(1,2, 4)]), na.rm = TRUE))
#[[1]]
#[1] 23.76272 18.24600 173.64427
#[[2]]
#[1] 22.70095 17.91415 139.72682
#[[3]]
#[1] 18.89224 18.40290 216.20110
#[[4]]
#[1] 10.66146 17.56891 180.27202
循环
for
如果意图只是循环for(i in ids) {
}
list
并获得data.frame
和colMeans
,那么似乎是不必要的。另外,我们可以在一次colSds
调用中执行此操作,而不是多个lapply
lapply
可以通过res1 <- lapply(lst, function(i) t(cbind(Mean = colMeans(i[, c(1,2, 4)],
na.rm = TRUE), Sds = colSds(as.matrix(i[, c(1,2, 4)]), na.rm = TRUE))))
内容
rbind