【发布时间】:2018-04-30 06:38:43
【问题描述】:
我们从dplyr 中知道mutate_at 函数允许我们对选定的多个列进行变异并对每个列应用一个函数。我需要相反的。我的意思是说,将多个函数应用于同一列或将同一函数多次应用于同一列。采取以下reproducible example。
> main <- structure(list(PolygonId = c(0L, 1L, 1612L, 3L, 2L, 1698L), Area = c(3.018892,
1.995702, 0.582808, 1.176975, 2.277057, 0.014854), Perimeter = c(10.6415,
8.6314, 4.8478, 6.1484, 9.2226, 0.6503), h0 = c(1000,500,700,1000,200,1200)), .Names = c("PolygonId",
"Area", "Perimeter", "h0"), row.names = c(NA, 6L), class = "data.frame")
> main
PolygonId Area Perimeter h0
1 0 3.018892 10.6415 1000
2 1 1.995702 8.6314 500
3 1612 0.582808 4.8478 700
4 3 1.176975 6.1484 1000
5 2 2.277057 9.2226 200
6 1698 0.014854 0.6503 1200
我只关心df main中的h0列。
预期结果:h10 字段是 h0 + 10% of h0 和 h_10 是 h0 - 10% of h0
PolygonId Area Perimeter h0 h10 h20 h_10 h_20
1 0 3.018892 10.6415 1000 1100 1200 900 800
2 1 1.995702 8.6314 500 550 600 450 400
3 1612 0.582808 4.8478 700 770 840 630 560
4 3 1.176975 6.1484 1000 1100 1200 900 800
5 2 2.277057 9.2226 200 220 240 180 160
6 1698 0.014854 0.6503 1200 1320 1440 1080 960
我通常会这样做::
calcH <- function(h, pc){
h + pc / 100 * h
}
new_main <- mutate ( main,
h10 = calcH(h0, 10),
h20 = calcH(h0, 20),
h_10 = calcH(h0, -10),
h_20 = calcH(h0, -20)
)
但这将是一个忙碌而冗长的代码,因为我必须以正反两种方式对1%, 2.5%, 5%, 7.5%, 10%, 12.5%, 15%... 30% 进行此计算。
【问题讨论】:
-
为什么你的函数被
{而不是(调用? -
这是一个错误。对不起@AndreElrico
-
修复顶部的“mutate_at”。
-
什么是
df?请提供可重现的示例和预期输出 -
查看这个 SO 帖子,它可能会有所帮助:stackoverflow.com/questions/4391592/… 和这个:stackoverflow.com/questions/6827299/…