我有一个包含多个变量和很多Na的数据框
Experiment <- c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C")
Station <- c(1, 1, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 1, 1, 1, 2, 2, 3)
Depth <- c(5, 20, 7, 50, 6, 20, 40, 100, 15, 20, 78, 92, 15, 56, 87, 10, 60, 80, 150, 10, 15, 35, 7, 25, 5)
ConcA <- c(0.2, 0.3, 0.1, 0.2, 0.1, 0.3, 0.4, NA, 0.2, 0.4, 0.3, 0.2, 0.3, 0.1, 0.1, 0.2, 0.5, 0.4, 0.4, NA, 0.15, NA, 0.4, 0.4, 0.1)
ConcB <- c(NA, 0.2, 0.4, 0.1, 0.1, 0.2, 0.4, 0.3, 0.1, 0.2, 0.3, 0.1, 0.1, 0.2, 0.2, 0.1, 0.3, 0.4, 0.3, 0.2, 0.3, 0.2, 0.4, 0.4, NA)
df <- data.frame(Experiment, Station, Depth, ConcA, ConcB)
这些实验是在世界各地进行的,数据集实际上是巨大的。这只是数据的一个子集。如您所见,样品的深度在不同的站和实验中是不同的,并且浓度数据(ConcA和ConcB)中有很多Na
我正在尝试将深度子集到最顶50m,并针对每个基于电台的实验对每1m深度进行数据插值(即,每个实验我将以1m的间隔获取每个电台的一个剖面)。
df <- subset(df, Depth < 50) #this works
df$interp <- NA
df$interp <- approx(df$ConcA, method="linear", n = 50)#this outputs data that is incorrect
df %>% #this works!
group_by(Experiment) %>%
mutate(interp_ConcA = na.approx(ConcA, na.rm=FALSE))
这可以对数据进行插值,但是我如何“创建”长达50米的1米深度间隔并为每1米深度插值ConcA(而不只是对深度5、20、7等处的观测值进行插值)?因为所有采样都是在不同深度的不同位置进行的,所以我想对ConcA和ConcB进行匹配,使它们都具有1米的深度数据...
然后合并数据以获取10m间隔的平均值。
我已经尝试过了,但是我得到了很多NA
concA.mean <- df %>%
group_by(Experiment, Station, Depth = floor(Depth/10)*10) %>%
dplyr::summarize(interp_ConcA=mean(ConcA, na.rm = TRUE ))
concA.mean
concB.mean <- df %>%
group_by(Experiment, Station, Depth = floor(Depth/10)*10) %>%
dplyr::summarize(interp_ConcB=mean(ConcB, na.rm = TRUE ))
concB.mean
最终,我想绘制各个数据的分布图(即每个实验中每个站点的实际收集的浓度数据),然后在其上添加均值线以显示全球的平均分布图。
(profile <- ggplot(data=df, aes(x=ConcA, y=Depth, group=Station)) +
geom_path(colour="grey80", size=0.3) +
geom_path(aes(x= interp_ConcA, y=Depth),inherit.aes=FALSE,colour="black",data=ConcA.mean,lwd=0.6)+
#facet_wrap(~Experiment, scales = "free_y") + scale_y_reverse() +
scale_y_reverse(breaks= seq(0, 50,by=10)) +
theme_bw() + scale_x_continuous(position = "top") +
ylab(""))
我在做什么错了?
我刚刚尝试关注
Linear Interpolation using dplyr和R: Interpolation of NAs by group并使其适应我的代码:
谢谢!