我试图做一些非常类似于相对于每组中的值的比较(通过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))
由于某些原因,您的尝试没有意义.
当您data
再次明确传入时,它不是之前分组的链的一部分,因此它不知道分组.
所有dplyr
动词都将数据帧作为第一个参数并返回数据帧,包括filter
.当您value = filter(...)
尝试将完整数据框分配给单个列时value
.