我正在尝试针对每个组中的值(通过dplyr)执行与Scale非常相似的操作(但是此解决方案似乎会使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))
由于以下几个原因,您的尝试没有任何意义。
当您data
再次明确传递时,它不是早先进行分组的链的一部分,因此它不知道分组。
所有dplyr
动词都将数据框作为第一个参数,并返回一个数据框,包括filter
。当您value = filter(...)
尝试将完整的数据帧分配给单列时value
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句