data.frame colmn表示第n行的行间距

时间:2014-01-25 15:38:23

标签: r lapply sapply

我试图在这里找到类似的问题,但认为创建新问题可能会有所帮助。

我有相对较大的数据集(数百个站的每日天气数据) 我做了一些滑动窗口平均计算,我得到了这样的中间输出。

10481441 row 11 column的数据框,但我的行名由具有可识别前缀的一系列数字组成。

例如,

X1.1
X1.2
X1.3
...
X1.11659
X2.1
X2.2
X2.3
...
X2.11659
X3.1
...
X899.11659

然后我要做的是通过行号的相同前缀获得11 columns的平均值

例如:
对于11 columns mean(X1.1,X2.1,X3.1,...X899.1) (X1.2,X2.2,X3.2,...X899.2),因此期望899 11659 row 11 column的{​​{1}}输出表格为as.Date

我得到了一些帮助,当我有{{1}}行名称但是无法修改所需的格式时,第n行的跳跃平均值。

我感谢你的时间。

1 个答案:

答案 0 :(得分:5)

添加包含所需类别的新列,并在aggregate中使用该列。这是一个例子:

d <- data.frame(x=1:12)
rownames(d) <- paste0('X', rep(1:4, 3), '.', rep(1:3, 4))
d
##       x
## X1.1  1
## X2.2  2
## X3.3  3
## X4.1  4
## X1.2  5
## X2.3  6
## X3.1  7
## X4.2  8
## X1.3  9
## X2.1 10
## X3.2 11
## X4.3 12

这看起来就像你的数据。现在将类别添加为新列。如果您在.上拆分每个名称,则需要返回第二个条目:

d$category <- sapply(strsplit(rownames(d), '[.]'), '[', i=2)
d
##       x category
## X1.1  1        1
## X2.2  2        2
## X3.3  3        3
## X4.1  4        1
## X1.2  5        2
## X2.3  6        3
## X3.1  7        1
## X4.2  8        2
## X1.3  9        3
## X2.1 10        1
## X3.2 11        2
## X4.3 12        3

根据这个新专栏进行汇总。 .这里的意思是“所有其他列”,因此您将获得除新列以外的所有内容的方法:

aggregate(.~category, data=d, FUN=mean)
##   category   x
## 1        1 5.5
## 2        2 6.5
## 3        3 7.5