我有一个数据框,每 5 秒有一个 x/y 值,每秒有一个深度值(时间列)。有 x/y 值的地方没有深度。
x <- c("1430934", NA, NA, NA, NA, "1430939")
y <- c("4943206", NA, NA, NA, NA, "4943210")
time <- c(1:6)
depth <- c(NA, 10, 19, 84, 65, NA)
data <- data.frame(x, y, time, depth)
data
x y time depth
1 1430934 4943206 1 NA
2 NA NA 2 10
3 NA NA 3 19
4 NA NA 4 84
5 NA NA 5 65
6 1430939 4943210 6 NA
我想计算非 NA 的 x/y 值之间的最大深度,并将其添加到起始 x/y 值行中的新列中。所以第 2-5 行的最大深度。所需输出的示例。
x y time depth newvar
1 1430934 4943206 1 NA 84
2 NA NA 2 10 NA
3 NA NA 3 19 NA
4 NA NA 4 84 NA
5 NA NA 5 65 NA
6 1430939 4943210 6 NA NA
只要出现新的 x/y 值,就会重复此操作。
最佳答案
您可以将 ave
和 cumsum
与 !is.na
一起使用来获取 ave 的组,例如:
data$newvar <- ave(data$depth, cumsum(!is.na(data$x)), FUN=
function(x) if(all(is.na(x))) NA else {
c(max(x, na.rm=TRUE), rep(NA, length(x)-1))})
data
# x y time depth newvar
#1 1430934 4943206 1 NA 84
#2 <NA> <NA> 2 10 NA
#3 <NA> <NA> 3 19 NA
#4 <NA> <NA> 4 84 NA
#5 <NA> <NA> 5 65 NA
#6 1430939 4943210 6 NA NA
关于r - 在数据帧间隔内查找最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61338917/