我试图使用dplyr从同一组中另一行的值中减去特定组中的值。
例如,采用以下数据框
df <- data.frame(Letter = c("a","b", "b", "a","b","b"),
value = c("1","2","2","6","7","10"),
year =c("2001", "2001", "2001", "2005", "2005", "2005"))
我试图将2001和2005作为一个单独的组,并用“a”的值减去“b”的值
这样我最终会得到
Letter value year dvalue
1 a 1 2001 0
2 b 2 2001 1
3 b 2 2001 1
4 a 6 2005 0
5 b 7 2005 1
6 b 10 2005 4
我尝试使用dplyr和mutate
data <- data %>% dplyr::group_by(year) %>%
dplyr::mutate(dvalue = value[Letter == "a"] - value[Letter == "b"])
并引发以下错误
mutate_impl(.data,dots)中的错误:列
dvalue
必须是长度 3(组大小)或1,而不是2
答案 0 :(得分:1)
以防您使用data.table接受答案
dt <- data.table(Letter = c("a","b", "b", "a","b","b"),
value = c(1,2,2,6,7,10),
year =c("2001", "2001", "2001", "2005", "2005", "2005"))
dt[, dvalue := value - .SD[Letter == "a"]$value,by=list(year)]
Letter value year dvalue
1: a 1 2001 0
2: b 2 2001 1
3: b 2 2001 1
4: a 6 2005 0
5: b 7 2005 1
6: b 10 2005 4
答案 1 :(得分:0)
将value
和year
列转换为数字后,我们可以使用mutate
从value
列中删除a
的每个value
每个小组。
library(dplyr)
df %>%
group_by(year) %>%
mutate(dvalue = value - value[Letter == "a"])
# Letter value year dvalue
# <fctr> <dbl> <dbl> <dbl>
#1 a 1 2001 0
#2 b 2 2001 1
#3 b 2 2001 1
#4 a 6 2005 0
#5 b 7 2005 1
#6 b 10 2005 4
注意:假设每组只有一个a
值。