另一种方法:由于有重复的计算,我们也可以采用以下方式:
library(dplyr)
df %>%
group_by(Date, Location) %>%
arrange(Code, .by_group = TRUE) %>%
mutate(pHDelta = pH-last(pH)) %>%
ungroup()
Date Location Code pH pHDelta
<chr> <chr> <chr> <dbl> <dbl>
1 22/07/01 AA A 7.1 -1.1
2 22/07/01 AA B 6.8 -1.4
3 22/07/01 AA F 8.2 0
4 22/07/01 AB A 7.2 -1.2
5 22/07/01 AB B 7.8 -0.600
6 22/07/01 AB F 8.4 0
7 22/07/01 AC A 7.5 -0.800
8 22/07/01 AC B 6.2 -2.1
9 22/07/01 AC F 8.3 0
10 22/07/01 AD A 7.1 -1.1
# ... with 14 more rows
数据:
structure(list(Date = c("22/07/01", "22/07/01", "22/07/01", "22/07/01",
"22/07/01", "22/07/01", "22/07/01", "22/07/01", "22/07/01", "22/07/01",
"22/07/01", "22/07/01", "22/07/02", "22/07/02", "22/07/02", "22/07/02",
"22/07/02", "22/07/02", "22/07/02", "22/07/02", "22/07/02", "22/07/02",
"22/07/02", "22/07/02"), Location = c("AA", "AA", "AA", "AB",
"AB", "AB", "AC", "AC", "AC", "AD", "AD", "AD", "AA", "AA", "AA",
"AB", "AB", "AB", "AC", "AC", "AC", "AD", "AD", "AD"), Code = c("A",
"B", "F", "A", "B", "F", "A", "B", "F", "A", "B", "F", "A", "B",
"F", "A", "B", "F", "A", "B", "F", "A", "B", "F"), pH = c(7.1,
6.8, 8.2, 7.2, 7.8, 8.4, 7.5, 6.2, 8.3, 7.1, 6.8, 8.2, 7.1, 6.8,
8.2, 7.2, 7.8, 8.4, 7.5, 6.2, 8.3, 7.1, 6.8, 8.2)), class = "data.frame", row.names = c(NA,
-24L))
group_by(Date, Location)
。 - akrunmutate()
: ! Problem while computingPhDelta = pH - pH[Chamber == "FL"]
. xPhDelta
must be size 1, not 0. i The error occurred in group 132: DATE = NA, LOC = "".' - Paul WildpH[Chamber == 'FL'][1]
强制转换为 NA。以你的例子为例,如果我将最后一个元素更改为C
或其他值,它仍然可以工作。 - akrun