gpt4 book ai didi

r - dplyr 在 mutate 中广播每组的单个值

转载 作者:行者123 更新时间:2023-12-02 19:55:13 24 4
gpt4 key购买 nike

我正在尝试做一些与 Scale relative to a value in each group (via dplyr) 非常相似的事情(但是这个解决方案似乎让 R 对我来说崩溃了)。我想为每个组复制一个值,并添加一个重复该值的新列。作为一个例子,我有

library(dplyr)

data = expand.grid(
category = LETTERS[1:2],
year = 2000:2003)
data$value = runif(nrow(data))

data

category year value
1 A 2000 0.6278798
2 B 2000 0.6112281
3 A 2001 0.2170495
4 B 2001 0.6454874
5 A 2002 0.9234604
6 B 2002 0.9311204
7 A 2003 0.5387899
8 B 2003 0.5573527

我想要一个像这样的数据框

data

category year value value2
1 A 2000 0.6278798 0.6278798
2 B 2000 0.6112281 0.6112281
3 A 2001 0.2170495 0.6278798
4 B 2001 0.6454874 0.6112281
5 A 2002 0.9234604 0.6278798
6 B 2002 0.9311204 0.6112281
7 A 2003 0.5387899 0.6278798
8 B 2003 0.5573527 0.6112281

即每个类别的值是 2000 年的值。我试图考虑一个可扩展到给定过滤标准的通用解决方案,即类似于

data %>% group_by(category) %>% mutate(value = filter(data, year==2002))

但是,由于作业长度不正确,这不起作用。

最佳答案

这样做:

data %>% group_by(category) %>%
mutate(value2 = value[year == 2000])

你也可以这样做:

data %>% group_by(category) %>%
arrange(year) %>%
mutate(value2 = value[1])

data %>% group_by(category) %>%
arrange(year) %>%
mutate(value2 = first(value))

data %>% group_by(category) %>%
mutate(value2 = nth(value, n = 1, order_by = "year"))

或者可能还有其他几种方式。

由于某些原因,您对 mutate(value = filter(data,year==2002)) 的尝试没有意义。

  1. 当您再次显式传入 data 时,它不是之前分组的链的一部分,因此它不知道分组。

  2. 所有dplyr动词都将数据帧作为第一个参数并返回数据帧,包括filter。当您执行value = filter(...)时,您正在尝试将完整的数据框分配给单列value

关于r - dplyr 在 mutate 中广播每组的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075793/

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