我在 R 中有一个巨大的数据框 (A),如下所示:
Letters Frequency Numbers
a 0.15 1
b 0.67 2
c 0.85 7
d 0.4 3
我想首先根据“Frequency”列的值范围(4个大小为0.25的频率仓)将A分为4个数据框,从0到1,这样我得到:
A1 [0, 0.25]
Letters Frequency Numbers
a 0.15 1
A2 [0.25, 0.5]
Letters Frequency Numbers
d 0.4 3
A3 [0.5, 0.75]
Letters Frequency Numbers
b 0.67 2
A4 [0.75, 1]
Letters Frequency Numbers
c 0.85 7
以迭代方式并遵循频率仓的顺序,我想在 A1、A2、A3 和 A4 中执行数学运算(例如,op1 = Numbers - 2;op2 = Numbers * 10)并创建数据带有附加结果的帧 B:
B
bin op1 op2
[0, 0.25] -1 10
[0.25, 0.5] 1 30
[0.5, 0.75] 0 20
[0.75, 1] 5 70
我想我不需要创建 A1、A2、A3 和 A4(理想情况下我只想使用 A)并且有一种更优雅的方法可以通过直接迭代频率仓来获取 B,但是我在这个例子中创建它们是为了清楚地解释原理。我认为这可以通过 lapply 完成,但我不确定如何完成。预先非常感谢您。
最佳答案
采用拆分-应用-组合方法的基本 R 方法是
do.call(rbind, lapply(split(dd, findInterval(dd$Frequency, c(0, .25, .5, .75, 1))),
function(i) within(i, { # create variables, remove Numbers
op1 <- Numbers - 2
op2 <- Numbers * 10
Numbers <- NULL})))
这会返回
Letters Frequency op2 op1
1 a 0.15 10 -1
2 d 0.40 30 1
3 b 0.67 20 0
4 c 0.85 70 5
这里,findInterval
根据频率对观测值进行分箱,split
根据这些分箱分割 data.frame 并相应地对数据进行排序,lapply
> 和 within
用于为每个组构造新变量。
关于r - 使用 R,迭代数据帧,对每个数据帧执行数学运算,将结果附加到新数据帧中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42123780/