我有一个大型数据(称为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的空盐度列中。
由于我必须这样做的多种治疗,这将是理想的有某种循环,我认为。但是,如果这是不可能的,我也可以为每种治疗运行代码。
非常感谢有人能帮我的忙!
发布于 2022-06-02 12:56:58
下面是使用trXX data.frames的一些合成样例数据的可能分配
# 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 80https://stackoverflow.com/questions/72476255
复制相似问题