Jef*_*_hk 0 aggregate r reshape
在此先感谢您的帮助.我正在使用R,让我们说我有一个数据表(或最终与动物园的时间序列),格式如下:
Col1: time Values
Day1 H1 Value
Day1 H2 Value
Day1 H3 Value
Day1 H4 Value
Day2 H1 Value
Day2 H2 Value
Day2 H3 Value
Day2 H4 Value
Day3 H1 Value
...
Run Code Online (Sandbox Code Playgroud)
假设我想构造一个具有以下格式的矩阵:行:天
H1 H2 H3 H4
D1 Values Values Values Values
D2 Values Values Values Values
D3 Values Values Values Values
Run Code Online (Sandbox Code Playgroud)
并且:
average(H1,H2) average(H3,H4)
D1 Values Vales
D2 Values Vales
D3 Values Vales
Run Code Online (Sandbox Code Playgroud)
在某些语言(如C++)中,我们可能会进行双重'for',但我不确定这是继续进行此操作的最佳方法.非常感谢,我是R的新手,我对不同的逻辑感到很遗憾(但非常有趣).
我已经看到关于这个主题的其他问题但我根本不清楚.
这可以通过一些基本reshape工作和/ aggregate()或within()手段来完成:
首先,一些示例数据非常有用:
set.seed(1)
temp <- data.frame(Col1 = paste("Day", rep(1:4, each = 4), sep=""),
times = paste("H", rep(1:4, times = 4), sep=""),
Values = runif(16, min=0, max=10))
temp
# Col1 times Values
# 1 Day1 H1 2.6550866
# 2 Day1 H2 3.7212390
# 3 Day1 H3 5.7285336
# 4 Day1 H4 9.0820779
# 5 Day2 H1 2.0168193
# 6 Day2 H2 8.9838968
# 7 Day2 H3 9.4467527
# 8 Day2 H4 6.6079779
# 9 Day3 H1 6.2911404
# 10 Day3 H2 0.6178627
# 11 Day3 H3 2.0597457
# 12 Day3 H4 1.7655675
# 13 Day4 H1 6.8702285
# 14 Day4 H2 3.8410372
# 15 Day4 H3 7.6984142
# 16 Day4 H4 4.9769924
Run Code Online (Sandbox Code Playgroud)
第二,使用reshape从长格式到宽格式
tempwide <- reshape(temp, direction = "wide", idvar="Col1", timevar="times")
tempwide
# Col1 Values.H1 Values.H2 Values.H3 Values.H4
# 1 Day1 2.655087 3.7212390 5.728534 9.082078
# 5 Day2 2.016819 8.9838968 9.446753 6.607978
# 9 Day3 6.291140 0.6178627 2.059746 1.765568
# 13 Day4 6.870228 3.8410372 7.698414 4.976992
Run Code Online (Sandbox Code Playgroud)
第三,使用rowMeans列的所需子集.aggregate如果您愿意,也可以使用,但这是转换原始内容的便捷方式data.frame.
tempwide <- within(tempwide, {
mean.H1H2 <- rowMeans(tempwide[2:3])
mean.H3H4 <- rowMeans(tempwide[4:5])
})
tempwide
# Col1 Values.H1 Values.H2 Values.H3 Values.H4 mean.H3H4 mean.H1H2
# 1 Day1 2.655087 3.7212390 5.728534 9.082078 7.405306 3.188163
# 5 Day2 2.016819 8.9838968 9.446753 6.607978 8.027365 5.500358
# 9 Day3 6.291140 0.6178627 2.059746 1.765568 1.912657 3.454502
# 13 Day4 6.870228 3.8410372 7.698414 4.976992 6.337703 5.355633
Run Code Online (Sandbox Code Playgroud)