如何计算R中多个站点的最大NA数据差距?
我有一个数据框(如何计算R中多个站点的最大NA数据差距?,r,for-loop,R,For Loop,我有一个数据框(df1),我想知道每个唯一的siteID在Temp.列中的最大NA间隙。我已经尝试使用for循环来回答这个问题,但无法使其工作,请参见下面的内容 df1 <- data.frame(matrix(ncol = 3, nrow = 9)) x <- c("siteID", "Date", "Temp.") colnames(df1) <- x df1$siteID <- c("a"
df1
),我想知道每个唯一的siteID
在Temp.
列中的最大NA
间隙。我已经尝试使用for循环来回答这个问题,但无法使其工作,请参见下面的内容
df1 <- data.frame(matrix(ncol = 3, nrow = 9))
x <- c("siteID", "Date", "Temp.")
colnames(df1) <- x
df1$siteID <- c("a","a","a",
"b","b","b",
"c","c","c")
df1$Date <- rep(seq(from = as.Date("2020-01-01"), to = as.Date("2020-01-03"), by = 1),3)
df1$Temp. <- c("10",NA,NA,
"20",NA,"10",
"2","4","6")
输出应该如下所示
saveDat
siteID MaxGap
1 a 2
2 b 1
3 c 0
这里有一个选项,我们根据'Temp'的NA元素的'siteID'和运行长度id进行分组,然后创建一个计数列(
n()
),summary
返回'MaxGap'的第一个值如果在'Temp'中有任何
,或者其他0,slice
按“siteID”分组的“MaxGap”的最大行
library(dplyr)
library(data.table)
df1 %>%
group_by(siteID, grp = rleid(is.na(Temp.))) %>%
mutate(MaxGap = n()) %>%
summarise(MaxGap = if(any(is.na(Temp.))) first(MaxGap)
else 0, .groups = 'drop') %>%
group_by(siteID) %>%
slice_max(n = 1, MaxGap) %>%
select(-grp)
-输出
# A tibble: 3 x 2
# Groups: siteID [3]
# siteID MaxGap
# <chr> <dbl>
#1 a 2
#2 b 1
#3 c 0
# A tibble: 3 x 2
# siteID MaxGap
# <chr> <dbl>
#1 a 2
#2 b 1
#3 c 0
-输出
# A tibble: 3 x 2
# Groups: siteID [3]
# siteID MaxGap
# <chr> <dbl>
#1 a 2
#2 b 1
#3 c 0
# A tibble: 3 x 2
# siteID MaxGap
# <chr> <dbl>
#1 a 2
#2 b 1
#3 c 0
#一个tible:3 x 2
#站点ID MaxGap
#
#1 a 2
#2 b 1
#3C0
相关: