“棘轮”功能:仅当明年的结果更大时才替换上一年的结果[重复]
Posted
技术标签:
【中文标题】“棘轮”功能:仅当明年的结果更大时才替换上一年的结果[重复]【英文标题】:"ratchet" function: replace previous year's results only if next year's results are greater [duplicate] 【发布时间】:2018-11-06 14:12:54 【问题描述】:只有在下一年的percentpp
更大时,我才需要遍历 df 中的年份并替换另一列 (percentpp
) 中的值。一旦一个单元格达到一个高值,它就无法返回 - 只能向上,就像棘轮一样。
例如,我有什么:
cell_id year percentpp
1 40 2011 3
2 41 2011 1
3 42 2011 0
4 43 2011 0
5 40 2012 1
6 41 2012 5
7 42 2012 1
8 43 2012 5
9 40 2013 2
10 41 2013 2
11 42 2013 2
12 43 2013 0
13 40 2014 2
14 41 2014 3
15 42 2014 3
16 43 2014 3
以及我希望它变成的样子:
cell_id year percentpp
1 40 2011 3
2 41 2011 1
3 42 2011 0
4 43 2011 0
5 40 2012 3
6 41 2012 5
7 42 2012 1
8 43 2012 5
9 40 2013 3
10 41 2013 5
11 42 2013 2
12 43 2013 5
13 40 2014 3
14 41 2014 5
15 42 2014 3
16 43 2014 5
我正在想象一个具有这种伪 R/SQL 逻辑的函数,然后使用 lapply
循环遍历:
function(x)
if df$percentpp[year+1,] is greater than df$percentpp[year,]
when cell_id$year = cell_id$year+1
then df$percentpp[year,] <- df$percentpp[year+1,]
但我不确定如何正确执行此操作。
【问题讨论】:
【参考方案1】:您可以使用cummax
。
使用基础 R:
df <- df[order(df$year), ]
df$percentpp <- ave(df$percentpp, df$cell_id, FUN = cummax)
使用 dplyr:
library(dplyr)
df <- df %>%
group_by(cell_id) %>%
arrange(year) %>%
mutate(percentpp = cummax(percentpp)) %>%
ungroup
数据:
df <- read.table(text = "
cell_id year percentpp
1 40 2011 3
2 41 2011 1
3 42 2011 0
4 43 2011 0
5 40 2012 1
6 41 2012 5
7 42 2012 1
8 43 2012 5
9 40 2013 2
10 41 2013 2
11 42 2013 2
12 43 2013 0
13 40 2014 2
14 41 2014 3
15 42 2014 3
16 43 2014 3
")
【讨论】:
以上是关于“棘轮”功能:仅当明年的结果更大时才替换上一年的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:仅当它是文本的第一个单词时才替换“x”,而不是其他任何地方