微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将每行除以R中的上一行

如何解决将每行除以R中的上一行

我有 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。