当前位置:  开发笔记 > 编程语言 > 正文

dplyr在mutate中每组播放单个值

如何解决《dplyr在mutate中每组播放单个值》经验,为你挑选了1个好方法。

我试图做一些非常类似于相对于每组中的值的比较(通过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))

但是由于分配中的长度不正确,这不起作用.



1> Gregor..:

做这个:

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.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有