使用循环/应用/应用将公式应用于数据帧中的每一行

时间:2019-01-24 06:25:58

标签: r dataframe apply

我有以下数据框:

0.159774955 0.315950195 1.043728695 -0.013713845    0.300639692 0.089504862
0.225828659 0.359430606 0.837824198 0.023545454 0.454365387 0.146044804
0.200956642 0.284167712 0.741477338 0.095507608 0.380116007 0.108930805
0.178781669 0.268168151 0.890674193 0.025867199 0.439498785 0.090581651
0.259719853 0.253015856 0.733539294 -0.021271503    0.34807779  0.134256761
0.237380703 0.259466053 0.438376163 -0.017622207    0.403244764 0.123988446
0.255139392 0.249787728 0.429777131 0.003033289 0.357595856 0.135647263
0.231928182 0.229371247 0.374830209 0.048649557 0.412691492 0.135958108

我想将以下重新采样代码应用于每一行:

replicate(6, mean(sample(one, 6, replace=TRUE)))

最后,我希望将答案保存在输出数据框中。因此,基本上,任务是在数据帧的每一行上运行重采样功能,并以最有效的方式将输出保存到新的数据帧中。

有人可以帮我写一个循环吗

1 个答案:

答案 0 :(得分:1)

如果要将函数应用于df的每一行,则可以执行以下操作:

apply(array, margin, fun(x))

其中 array是您的数据框, margin的行数为1,列的数为2, fun(x)是您的函数,x是每行,例如function(x){mean(x)}


为发挥功能,请尝试

as.data.frame(t(apply(df, 1, function(x){
  replicate(6, mean(sample(x, 6, replace=TRUE)))
})))

其中df是您的数据框。结果:

> set.seed(1)
> as.data.frame(t(apply(df, 1, function(x){
+   replicate(6, mean(sample(x, 6, replace=TRUE)))
+ })))
         V1        V2        V3        V4         V5        V6
1 0.3068208 0.1422921 0.5131469 0.3159808 0.61606935 0.4984955
2 0.4083824 0.3365791 0.5149758 0.2826672 0.34761771 0.4413220
3 0.5306285 0.4393809 0.2884135 0.2416325 0.46592721 0.2858680
4 0.4046463 0.3153975 0.5783785 0.1321199 0.06213869 0.1863585
5 0.3461146 0.1959594 0.1886254 0.4904454 0.34373307 0.2179313
6 0.1681255 0.2924128 0.1607637 0.2372478 0.18738553 0.2585522
7 0.2015053 0.1494048 0.2805252 0.3345927 0.22052876 0.2905973
8 0.2724066 0.2384786 0.2612100 0.2544667 0.25447366 0.2393240