gpt4 book ai didi

R - Dplyr - 比较最后一行与实际行的值

转载 作者:行者123 更新时间:2023-12-04 09:28:00 24 4
gpt4 key购买 nike

我有这个数据框:

    year    month    UserID
1 2014 11 3527
2 2014 12 4916
3 2015 1 2445

并想添加一个“变化”列:公式为:ActualRow/LastRow - 1。

这是我的代码:
UserID_unicos2 <- UserID_unicos1 %>%
mutate(variation=(UserID/lag(UserID) - 1)) %>%
mutate(prev=lag(UserID))

但是,它只是返回:
    year    month   UserID  variation   prev
1 2014 11 3527 NA NA
2 2014 12 4916 0.3938191 3527
3 2015 1 2445 NA NA

如您所见,它只返回 2014-12 的值。而不是:2015-01。怎么来的?谢谢。

应用“dput()”后我的数据:
structure(list(year = c(2014L, 2014L, 2015L), month = c(11L, 
12L, 1L), UserID = c(3527L, 4916L, 2445L)), .Names = c("year",
"month", "UserID"), row.names = c(NA, -3L), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), vars = list(year), drop = TRUE, indices = list(
0:1, 2L), group_sizes = c(2L, 1L), biggest_group_size = 2L, labels = structure(list(
year = 2014:2015), class = "data.frame", row.names = c(NA,
-2L), .Names = "year", vars = list(year)))

最佳答案

根据您的 dput ,您的数据按 year 分组这就是为什么你会看到这个结果。试试这个:

UserID_unicos1 %>%
ungroup() %>%
mutate(variation=(UserID/lag(UserID) - 1),
prev=lag(UserID))

另请注意,您可以在同一 mutate 中创建两列。只是用逗号隔开。

关于R - Dplyr - 比较最后一行与实际行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com