【问题标题】:Grouping values together将值分组在一起
【发布时间】:2020-02-13 03:35:18
【问题描述】:

我试图以这样一种方式对我的数据进行分组,即每个数据集的第一个值,然后是每个数据集的第二个值,然后是每个数据集的第三个值。这是我所做的,以及每个数据集的样子:

#datasets created
newmax <- sapply(unstack(subset), function(r){max(values(r))})
newmax1 <- sapply(unstack(subset5), function(r){max(values(r))})
newmax2 <- sapply(unstack(subset18), function(r){max(values(r))})

> newmax
[1] 285.9906 287.6668 276.2251 247.1718 254.9781 308.1921 234.6858 235.7213 242.0865 247.1022 
233.6528 243.9972 297.6855
[14] 264.3488 251.2206 249.4745 242.8481 241.2680 347.7225 241.0539 359.7334 256.2414 343.5733 
270.5300 237.6458 260.9076
[27] 281.6629 273.9240 237.9238 237.8657 274.8282 254.7619 274.5488 240.1335 288.5369 263.7763 
256.8988 237.8154 335.7295
[40] 251.1009 268.0298 284.0815 335.7390 260.6265 261.9585 245.4095 317.5088 326.1608 301.0854 
256.6393 261.7769 248.8044
[53] 316.8620 285.2788 291.7393 282.7814 295.2238 263.5885 293.1581 323.0423 275.8465 321.7197 
267.7597 260.1087 300.4011
[66] 289.7009 312.8771 247.2548 310.7060 293.6764 294.6003 301.9609 274.3764 324.2272 326.5802 
312.4825 306.0726 271.3173
[79] 292.4768 270.7873 287.0801 363.9818 256.2259 282.1166 305.7313 276.7374 356.4052 296.8313 
355.2177 360.6911

> newmax1
[1] 159.0246 133.6294 153.0331 160.4190 148.2776 142.6571 172.3195 157.7454 148.3942 165.9219  
139.6812 140.4338 161.9404
[14] 136.1558 222.1469 160.5796 146.9243 146.8993 138.4256 181.2822 180.0468 136.2687 149.4805 
169.0774 156.5708 197.8407
[27] 191.2747 171.9067 302.4844 161.1594 166.2600 150.5847 171.2477 153.5008 176.8167 164.1645 
202.1044 185.5567 159.5147
[40] 188.2911 157.7030 159.3245 168.7951 145.3923 184.0441 169.1975 152.4814 157.8601 218.1362 
181.0313 241.6280 145.9474
[53] 181.1191 197.6868 160.4712 166.6491 182.9139 202.4592 164.4607 192.3751 216.7510 155.9616 
223.6624 170.2424 192.1529
[66] 166.4860 162.0195 231.3395 178.0869 212.7882 172.4338 174.4920 196.2973 195.0461 232.1316 
160.4764 235.2968 248.9072
[79] 164.1591 193.9029 173.5751 233.6983 160.4132 178.4975 238.9297 184.6619 202.9835 244.6498   
225.4075 180.8024


> newmax2
[1] 240.5591 200.7394 215.9244 211.9053 194.3641 243.4610 185.3560 224.9627 191.5551 202.0553 
219.7212 182.8306 218.4132
[14] 226.3639 234.4197 216.8123 225.2460 192.8765 257.7413 197.9228 213.0739 271.9188 192.6500 
195.1350 194.0970 203.7642
[27] 179.7267 216.7133 199.1632 223.2381 248.6822 211.2326 241.4532 197.2935 194.6268 189.2713 
198.8254 217.6894 227.3989
[40] 218.0017 198.4878 271.2049 225.8836 195.0280 235.8415 269.6207 177.6220 218.8525 238.0074 
231.2968 206.1418 251.5883
[53] 195.4047 176.4463 265.4490 274.9973 262.3909 214.1287 348.5859 272.7213 230.3467 208.9446 
247.6072 246.7016 225.6779
[66] 213.9412 279.3386 229.7833 270.4096 235.7482 211.5287 235.5385 200.0058 221.8117 210.8134   
252.3336 214.9943 262.2128
[79] 217.4706 211.3952 216.3089 227.9274 282.2023 232.6686 239.9312 209.6954 238.7950 284.0325 
233.5386 232.6486

为了隔离第一个、第二个和第三个值,我尝试了这个:

combined <- cbind(newmax[1],newmax1[1], newmax2[1], newmax[2], newmax1[2], newmax2[2], 
newmax[3], newmax1[3], newmax2[3])

> combined

     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
[1,] 285.9906 159.0246 240.5591 287.6668 133.6294 200.7394 276.2251 153.0331 215.9244

这正是我想要的(即所有第一个值,然后是第二个值和第三个值)。但是,我希望数据按照原始数据集中的方式排列(即 newmax、newmax1、newmax2)——使用“cbind”似乎会创建列?另外,是否有更快的方法来以相同的方式排列值,或者我所做的唯一方法是什么?

谢谢您,我们将不胜感激!

【问题讨论】:

    标签: r arrays


    【解决方案1】:

    提供类似的东西 sapply(x,`[` , c(1,2,3))
    这将对您的对象 x 一次镜头应用索引;
    或者类似的东西

    lapply(X = x, FUN = subset, select=c(1,2,3))

    如果是列,则不确定从您的数据中判断出什么适合您。
    PS:rbind 将进行行绑定,就像 cbind 进行列绑定一样

    【讨论】:

    • 非常感谢您的回复!我也试过这个:组合
    • 接受答案是 SO 的常见做法;比 1 行更简洁 - 不确定
    • GWD - 我只使用了“c”函数来合并我的数据,因为这不会创建任何列(只是标准行)。然而,虽然我新做的(见我上面的评论)工作得很好,是否可以像上面评论中的“c”函数那样以同样的方式排列我的数据,但速度更快?例如,安排所有第一个值首先出现,然后是所有第二个值,然后是所有第三个值?再次感谢
    • hmm - 不太确定,但听起来有点像你只想要这个df &lt;- data.frame(ColA=newmax, ColB=newmax1, ColC=newmax2),如果这不是你预期的顺序而不是转置它? t(df)
    • 这实际上很好用!感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多