根据r中其他数据框的列值,将多个数据框中的值插入到另一个数据框中



我有一个大型数据框架(称为dftot),其中包含多个环境变量列,包括深度,盐度和处理位置。相同的处理位置被多次使用。简化:

Depth<-c(1,4,33,7,8,20,12,8)
Treatment<- c("1.1", "1.2", "1.3", "2.1", "2.2", "2.3", "1.1", "1.2")
dftot<- data.frame(Depth, Treatment)

和(目前)盐度空列:

dftot[, "Salinity"] <- NA

此外,对于每个处理位置,我有一个包含深度和盐度的数据框。深度从1到40,我将在这里给出盐度随机数。对于处理1.1,它看起来像:

Depth11<- c(1:40)
Salinity11 <- c(data$newrow <- sample(40, size = nrow(data), replace = TRUE)
tr11<-  data.frame(Depth11, Salinity11)

我需要的是一段代码,它为dftot中的每个处理选择相应的处理数据框,并根据相应的深度将该处理数据框的盐度值填充到dftot中的空盐度列中。

由于我必须对多次治疗这样做,我认为最好有某种循环。但如果这是不可能的,我也可以运行每个处理的代码。

如果有人能帮助我,我将不胜感激!

这里有一种可能的方法,使用一些为trXX数据制作的样例数据。

# create some sample data
Depth<-c(1,4,33)
Treatment<- c("1.1", "1.2", "1.3")
dftot <- data.frame(Depth, Treatment)
set.seed(123)
tr11 <- data.frame(Depth = 1:40, Salinity = sample(1:100, 40))
tr12 <- data.frame(Depth = 1:40, Salinity = sample(1:100, 40))
tr13 <- data.frame(Depth = 1:40, Salinity = sample(1:100, 40))
## now we code
library(tidyverse)
# build list of all loaded tr.. dataframes
lookup <- mget(ls()[grepl("^tr", ls())]) %>%
dplyr::bind_rows(.id = "Treatment")
# now operate
dftot %>%
# get the treamtnet into dftot
dplyr::mutate(Treatment2 = paste0("tr", gsub("\.","", Treatment))) %>%
# join in data from the df.lookup
dplyr::left_join(lookup, by = c("Treatment2" = "Treatment", "Depth"))
#   Depth Treatment Treatment2 Salinity
# 1     1       1.1       tr11       31
# 2     4       1.2       tr12       13
# 3    33       1.3       tr13       80

相关内容

  • 没有找到相关文章

最新更新