R 如何分解数据帧并将列值减少一定百分比
我正在学习R,我正在寻找一些关于如何解决这个问题的帮助。我希望生成一个数据帧,将列值减少一定的百分比 例如: 以数据帧为例:R 如何分解数据帧并将列值减少一定百分比,r,R,我正在学习R,我正在寻找一些关于如何解决这个问题的帮助。我希望生成一个数据帧,将列值减少一定的百分比 例如: 以数据帧为例: id 500 396 450 我想操纵这个数据帧来产生以下输出——将每个值减少1.2%四倍 预期结果: id count 500 1 494 2 488.072 3 482.215136 4 476.428554368 5 396 1 391.248 2 386.553024 3 381.914387712 4 377.33
id
500
396
450
我想操纵这个数据帧来产生以下输出——将每个值减少1.2%四倍
预期结果:
id count
500 1
494 2
488.072 3
482.215136 4
476.428554368 5
396 1
391.248 2
386.553024 3
381.914387712 4
377.331415059456 5
450 1
444.6 2
451 3
445.588 4
452 5
我们可以使用
累计
创建值向量,该向量在每次迭代时重置,以将新值减少前一个值的1.2%
library(dplyr)
library(purrr)
library(tibble)
map_dfr(df1$id, ~
tibble(id = accumulate(rep(.x, 5), ~ .x - .y * 0.012 )) %>%
mutate(count = row_number()) )
-输出
# A tibble: 15 x 2
# id count
# <dbl> <int>
# 1 500 1
# 2 494 2
# 3 488 3
# 4 482 4
# 5 476 5
# 6 396 1
# 7 391. 2
# 8 386. 3
# 9 382. 4
#10 377. 5
#11 450 1
#12 445. 2
#13 439. 3
#14 434. 4
#15 428. 5
数据
df1我认为452
的最后一个值与预期中的445相比没有减少
out <- data.frame(id = numeric(0), count = integer(0))
for(i in seq_along(df1$id)) {
tmpid <- df1$id[i]
for(j in 2:5) {
tmpid[j] <- tmpid[j-1] - tmpid[j-1] * 0.012
}
out <- rbind(out, data.frame(id = tmpid, count = 1:5))
}
out
df1 <- structure(list(id = c(500L, 396L, 450L)), class = "data.frame",
row.names = c(NA,
-3L))