我有以下数据框:
代码:
name <- c("A","A","A","B")
a <- c (1,2,3,4)
b <- c (5, 6, 7, 8)
df <- data.frame(name,a,b)
我想做的是复制Excel步骤。
如果第2行中的名称==第1行中的名称,则6-1-
如果第3行中的名称==第2行中的名称,则7-2
如果第4行中的名称==第3行中的名称,则没有B <> A。
所以期望的结果是:
答案 0 :(得分:2)
这里是dplyr
library(dplyr)
df %>% group_by(name) %>% mutate(result = b- lag(a))
# A tibble: 4 x 4
# Groups: name [2]
# name a b result
# <fct> <dbl> <dbl> <dbl>
#1 A 1.00 5.00 NA
#2 A 2.00 6.00 5.00
#3 A 3.00 7.00 5.00
#4 B 4.00 8.00 NA
答案 1 :(得分:1)
我们可以使用
library(dplyr)
df %>%
group_by(name) %>%
mutate(new = lag(lead(b)-a))
# A tibble: 4 x 4
# Groups: name [2]
# name a b new
# <fct> <dbl> <dbl> <dbl>
#1 A 1 5 NA
#2 A 2 6 5
#3 A 3 7 5
#4 B 4 8 NA