问题描述
我有 R个数据框:
city hour value
0 NY 0 12
1 NY 12 24
2 LA 0 3
3 LA 12 9
对于每个城市,我希望将每行除以上一行并将结果写入新的数据框中。所需的输出是:
city ratio
NY 2
LA 3
解决方法
您可以像下面一样尝试aggregate
aggregate(value ~city,df,function(x) x[-1]/x[1])
给出
city value
1 LA 3
2 NY 2
数据
> dput(df)
structure(list(city = c("NY","NY","LA","LA"),hour = c(0L,12L,0L,12L),value = c(12L,24L,3L,9L)),class = "data.frame",row.names = c("0","1","2","3"))
,
您可以使用lag
获取先前的值,将每个value
的{{1}}除以先前的值,然后删除city
行。
NA
在library(dplyr)
df %>%
arrange(city,hour) %>%
group_by(city) %>%
summarise(value = value/lag(value)) %>%
na.omit()
# city value
# <chr> <dbl>
#1 LA 3
#2 NY 2
中,我们可以通过data.table
进行此操作:
shift