首页 > 解决方案 > 拆分数据框并将函数应用于 R 中的 2 个不同行

问题描述

我正在尝试将 ami.meld应用于 144 个数据框的列表,以便组合估计集及其标准错误。由于Amelia不适用于列表,我将其取消嵌套到一个大数据框中,其中每 2 行对应于原始数据框。下面是我的数据(288 行)的快照。

我想找到一种快速的方法,不要重复该命令 144 次 mi.meld(data,q=data[1,],data[2,]),和mi.meld (data,q=data[3,],data[4,]),再 142 次......

所以,在第一种情况下q应该是第一行的值向量,依此类推......

谢谢,卢卡斯

   nn        V1         V2         V3
ARE.1  1 357.85116 356.859011 359.432494
ARE.2  1   8.54784   7.450074   9.711469
ARE.3  2 503.99528 506.120967 507.520785
ARE.4  2  14.52657  12.129299  14.469123
AUS.1  3 421.60845 423.302610 425.196122
AUS.2  3  29.31331  27.230948  28.605672

标签: rsplit

解决方案


rownum <- seq_len(nrow(mtcars))
split(rownum, (rownum-1) %/% 2)[1:3]
# $`0`
# [1] 1 2
# $`1`
# [1] 3 4
# $`2`
# [1] 5 6
L <- lapply(split(rownum, (rownum-1) %/% 2), function(rn) mtcars[rn,])[1:3]
L
# $`0`
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# $`1`
#                 mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Datsun 710     22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# $`2`
#                    mpg cyl disp  hp drat   wt  qsec vs am gear carb
# Hornet Sportabout 18.7   8  360 175 3.15 3.44 17.02  0  0    3    2
# Valiant           18.1   6  225 105 2.76 3.46 20.22  1  0    3    1

一旦你知道list每个元素都是原始帧的 2 行子集,你可能会做类似的事情

lapply(L, function(x) ...)

...你期望你的电话在哪里。

短一点:

ret <- lapply(split(rownum, (rownum-1) %/% 2), function(rows) {
  if (length(rows) > 1) {
    mi.meld(mtcars[rn[1],], mtcars[rn[2],])
  }
})

})


推荐阅读