我想根据以下内容减去每个行组( ID ):
1) ID
2)减去" C2" 到该组的每个元素 数据: 我写下面的代码......但是有些东西不能正常工作 (更新) 列 Y_Diff 会相对于组的第一个元素( ID )减去输出。不正确!
列 Y_REAL 是我想要获得的输出。
此外,还有3行&#34;丢失&#34;沿着计算。 df <- data.frame (ID=rep(c("F1","F2","F3","F4","F5"),c(5,3,6,2,4)),
Cond=rep(c("C1","C2","C3","C4"),5),
Value=c(1:20),
Y_REAL = c(-1,0,1,2,3,
0,1,2,
-1,0,1,2,3,4,
NA,NA,
-1,0,1,2))
Order <- c("C1","C2","C3","C4")# order to be sorted the elements
library(dplyr)
library(magrittr)
Out <- df %>% #filter(Wheat_Exp,Field=="2014_P1") %>%
group_by(ID) %>%
slice(match(Order,Cond))%>%
mutate(Y_Diff = Value - lag(Value, default = Value[Cond == "C2"]))
答案 0 :(得分:1)
我们需要ifelse
来防范&#34;空&#34;群组,并使用which.max
查找Value
的第一个Cond == 'C2'
。然后做简单的减法:
df %>%
group_by(ID) %>%
mutate(Y_diff = Value - ifelse('C2' %in% Cond, Value[which.max(Cond == 'C2')], NA))
Source: local data frame [20 x 5] Groups: ID [5] ID Cond Value Y_REAL Y_diff <fctr> <fctr> <int> <dbl> <int> 1 F1 C1 1 -1 -1 2 F1 C2 2 0 0 3 F1 C3 3 1 1 4 F1 C4 4 2 2 5 F1 C1 5 3 3 6 F2 C2 6 0 0 7 F2 C3 7 1 1 8 F2 C4 8 2 2 9 F3 C1 9 -1 -1 10 F3 C2 10 0 0 11 F3 C3 11 1 1 12 F3 C4 12 2 2 13 F3 C1 13 3 3 14 F3 C2 14 4 4 15 F4 C3 15 NA NA 16 F4 C4 16 NA NA 17 F5 C1 17 -1 -1 18 F5 C2 18 0 0 19 F5 C3 19 1 1 20 F5 C4 20 2 2