我有一个关于应用函数的小问题。
例如我有:
l <- list(a = data.frame(A1=rep(10,5),B1=c(1,1,1,2,2),C1=c(5,10,20,7,30)),
b = data.frame(A1=rep(20,5),B1=c(3,3,4,4,4),C1=c(3,5,10,20,30)))
我想为每个 B1 找到一个最小的 C1。结果应该是
$a
A1 B1 C1
10 1 5
10 2 7
$b
A1 B1 C1
20 3 3
20 4 10
我知道如何用 'for' 来做,但是用 'lapply' 必须是一种更简单的方法,但我无法让它工作。
请帮忙
最佳答案
结合如何lapply
和 tapply
:
lapply(l, function(i) tapply(i$C1, i$B1, min))
$a
1 2
5 7
$b
3 4
3 10
考虑多个操作的技巧是将任务拆分为位。所以,
C1
每个B1
.我们如何为 执行此操作单例数据框?i = l[[1]]
tapply(i$C1, i$B1, min)
lapply
:lapply(l, function(i) tapply(i$C1, i$B1, min))
如果您不能完成第 1 步,您将无法管理第 2 步。
关于r - 如何拆分 data.frame 列表并将函数应用于一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14829784/