R动态data.frame子集

时间:2015-01-27 00:27:26

标签: r

我有一个与此类似的数据框:

       A         B           C          D          E          F           G         H          I           J          K     origin
1 -0.7236848 -0.4245541  0.7083451  3.1623596  3.8169532 -0.04582876  2.0287920 4.409196 -0.3194430  5.9069321  2.7071142      1
2 -0.8317734  4.8795289  0.4585997 -0.2634786 -0.7881651 -0.37251184  1.0951245 4.157672  4.2433676  1.4588268 -0.6623890      1
3 -0.7633280 -0.2985844 -0.9139702  3.7480425  3.5672651  0.06220035 -0.3770195 1.101240  2.0921264  6.6496937 -0.7218320      1
4  0.8311566 -0.7939485  0.5295287 -0.5508124 -0.3175838 -0.63254736  0.6145020 4.186136 -0.1858161 -0.1864584  0.7278854      2
5  1.4768837 -0.7612165  0.8571546  2.3227173 -0.8568081 -0.87088020  0.2269735 4.386104  3.9009236 -0.6429641  3.6163318      2
6 -0.9335004  4.4542639  1.0238832 -0.2304124  0.8630241 -0.50556039  2.8072757 5.168369  5.9942144  0.6165200 -0.5349257      2

注意最后一个变量叫做origin; 1级和2级因子标签;我的真实数据集有更多级别。

我正在使用的功能需要以下格式:

结果< - specialFuc(matrix1,matrix2,....)

我想要做的是编写一个函数,使得输入数据帧(或矩阵)被“origin”分割,然后动态地我会得到多个矩阵来给我的“specialFuc”

我的解决方案是:

for (i in 1:length(levels(df[,"origin"))){

    assign(paste("Var", "_", i, sep=''), subset(df, origin!=i)))
}

使用这个,我可以创建一个名单列表,我使用get()来放入我的特殊功能。

你可以想象这不是动态的...... 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我认为像

 do.call(specialFunc,
   split.data.frame(df[,-ncol(df)],df$origin))

应该这样做吗?