根据R中的方程式对数据进行子集 在我的非常大的数据帧中,我需要找到每个站的最大PAR的PAR=1%的深度。我可以通过以下方法找到此深度: Station <- c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7,7,8, 8, 8, 9, 9,9) Depth <- c(1, 2, 3, 1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3) Value <- c(5, 8, 3, 2, 6, 8, 3, 6, 3, 8, 3, 5, 7, 2, 6, 9, 1, 3, 456, 321, 2, 5, 7, 4, 2, 6, 8) par <- c(100, 1, 0.05, 300, 3, 0.3, 250, 2, 0.2, 100, 1, 0.05, 300, 3, 0.3, 250, 2, 0.2,100, 1, 0.05, 300, 3, 0.3, 250, 2, 0.2) df <- data.frame(Station, Depth, Value, par) df miss <- function(x) ifelse(is.finite(x),x,NA) d.depths <- df %>% group_by(Station) %>% summarize( depth=miss(min(Depth[par <= 0.1*max(par, na.rm=TRUE)], Inf, na.rm=TRUE))) Station

根据R中的方程式对数据进行子集 在我的非常大的数据帧中,我需要找到每个站的最大PAR的PAR=1%的深度。我可以通过以下方法找到此深度: Station <- c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7,7,8, 8, 8, 9, 9,9) Depth <- c(1, 2, 3, 1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3,1, 2, 3) Value <- c(5, 8, 3, 2, 6, 8, 3, 6, 3, 8, 3, 5, 7, 2, 6, 9, 1, 3, 456, 321, 2, 5, 7, 4, 2, 6, 8) par <- c(100, 1, 0.05, 300, 3, 0.3, 250, 2, 0.2, 100, 1, 0.05, 300, 3, 0.3, 250, 2, 0.2,100, 1, 0.05, 300, 3, 0.3, 250, 2, 0.2) df <- data.frame(Station, Depth, Value, par) df miss <- function(x) ifelse(is.finite(x),x,NA) d.depths <- df %>% group_by(Station) %>% summarize( depth=miss(min(Depth[par <= 0.1*max(par, na.rm=TRUE)], Inf, na.rm=TRUE))) Station,r,R,您可以使用df加入d.depts,并保持深度值大于最大值的1% library(dplyr) d.depths %>% left_join(df, by = 'Station') %>% filter(Depth >= depth) 我想你在找这样的东西: par<-tapply(df$par,df$Station,max) max_par<-par[df$Station] df[df$par>=0.01*max_par,] # Statio

您可以使用
df
加入
d.depts
,并保持深度值大于最大值的1%

library(dplyr)

d.depths %>%
  left_join(df, by = 'Station') %>%
  filter(Depth >= depth)

我想你在找这样的东西:

par<-tapply(df$par,df$Station,max)
max_par<-par[df$Station]
df[df$par>=0.01*max_par,]

#   Station Depth Value par
#1        1     1     5 100
#2        1     2     8   1
#4        2     1     2 300
#5        2     2     6   3
#7        3     1     3 250
#10       4     1     8 100
#11       4     2     3   1
#13       5     1     7 300
#14       5     2     2   3
#16       6     1     9 250
#19       7     1   456 100
#20       7     2   321   1
#22       8     1     5 300
#23       8     2     7   3
#25       9     1     2 250
par也许尝试
mutate()
而不是
summary()
?然后,用
par<1
过滤掉行

miss <- function(x) ifelse(is.finite(x),x,NA)
d.depths <- df %>% 
  group_by(Station) %>%
  mutate(
    depth=miss(min(Depth[par <= 0.1*max(par, na.rm=TRUE)], Inf, na.rm=TRUE))
  ) %>% 
  ungroup() %>% 
  filter(par >= 1)

d.depths

# # A tibble: 18 x 5
#    Station Depth Value   par depth
#      <dbl> <dbl> <dbl> <dbl> <dbl>
#  1       1     1     5   100     2
#  2       1     2     8     1     2
#  3       2     1     2   300     2
#  4       2     2     6     3     2
#  5       3     1     3   250     2
#  6       3     2     6     2     2
#  7       4     1     8   100     2
#  8       4     2     3     1     2
#  9       5     1     7   300     2
# 10       5     2     2     3     2
# 11       6     1     9   250     2
# 12       6     2     1     2     2
# 13       7     1   456   100     2
# 14       7     2   321     1     2
# 15       8     1     5   300     2
# 16       8     2     7     3     2
# 17       9     1     2   250     2
# 18       9     2     6     2     2
miss%
变异(
深度=未命中(最小深度[标准杆百分比
解组()%>%
过滤器(par>=1)
d、 深渊
##tibble:18 x 5
站深值PAR深度
#          
#  1       1     1     5   100     2
#  2       1     2     8     1     2
#  3       2     1     2   300     2
#  4       2     2     6     3     2
#  5       3     1     3   250     2
#  6       3     2     6     2     2
#  7       4     1     8   100     2
#  8       4     2     3     1     2
#  9       5     1     7   300     2
# 10       5     2     2     3     2
# 11       6     1     9   250     2
# 12       6     2     1     2     2
# 13       7     1   456   100     2
# 14       7     2   321     1     2
# 15       8     1     5   300     2
# 16       8     2     7     3     2
# 17       9     1     2   250     2
# 18       9     2     6     2     2

谢谢你!我的数据是每2m。这主要是工作的,但是我好像错过了最后的深度。例如,如果PAR为1%的深度是122M,然后使用过滤器,我从0到120。如果深度是7M,那么使用过滤器我得到0到72M。我试着改变> = = =,但是我的文件保存了空白…为什么它省去了最后一个?你能试试吗?更新答案?
miss <- function(x) ifelse(is.finite(x),x,NA)
d.depths <- df %>% 
  group_by(Station) %>%
  mutate(
    depth=miss(min(Depth[par <= 0.1*max(par, na.rm=TRUE)], Inf, na.rm=TRUE))
  ) %>% 
  ungroup() %>% 
  filter(par >= 1)

d.depths

# # A tibble: 18 x 5
#    Station Depth Value   par depth
#      <dbl> <dbl> <dbl> <dbl> <dbl>
#  1       1     1     5   100     2
#  2       1     2     8     1     2
#  3       2     1     2   300     2
#  4       2     2     6     3     2
#  5       3     1     3   250     2
#  6       3     2     6     2     2
#  7       4     1     8   100     2
#  8       4     2     3     1     2
#  9       5     1     7   300     2
# 10       5     2     2     3     2
# 11       6     1     9   250     2
# 12       6     2     1     2     2
# 13       7     1   456   100     2
# 14       7     2   321     1     2
# 15       8     1     5   300     2
# 16       8     2     7     3     2
# 17       9     1     2   250     2
# 18       9     2     6     2     2