根据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