如何根据 R 中的两列生成序列?

How to generate a sequence based on two columns in R?

您可以在下方用 R 重新创建我的数据。我想根据两个单独的列生成一个数字序列。在这个真实数据示例中,我的列名是:

df= or10x1BC

"Tank" "Core" "BCl"  "BCu"  "Mid"  "TL"   "SL"

我希望使用 BCuBCl 的每一行中的值生成一个 0.001 的序列。例如 seq(BCu[1], BCl[1], 0.001) 将根据每一行的第一行生成一个序列,我希望对列表中的每一行都进行这项工作。

最终这个序列将在我的函数中用于计算序列的平均值,即 mean(function(seq(Bcu[i], BCl[j], 0.001)) 并添加到新列 or10x1BC["meanBVF"] = mean(function(seq(Bcu[i], BCl[j], 0.001))

查看以下数据:


structure(list(Tank = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "1", class = "factor"), Core = structure(c(1L, 
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"), 
    BCl = structure(c(8L, 5L, 2L, 6L, 3L, 1L, 9L, 7L, 4L), .Label = c("17", 
    "18", "22", "22.3", "23", "26", "27.3", "28", "29"), class = "factor"), 
    BCu = structure(c(8L, 5L, 2L, 6L, 3L, 1L, 9L, 7L, 4L), .Label = c("12.5", 
    "13.5", "17", "17.8", "18", "22", "22.3", "23", "27.3"), class = "factor"), 
    Mid = structure(c(8L, 5L, 2L, 6L, 3L, 1L, 9L, 7L, 4L), .Label = c("14.75", 
    "15.75", "19.5", "20.05", "20.5", "24", "24.8", "25.5", "28.15"
    ), class = "factor"), TL = structure(c(2L, 2L, 2L, 1L, 1L, 
    1L, 3L, 3L, 3L), .Label = c("26", "28", "29"), class = "factor"), 
    SL = structure(c(4L, 4L, 3L, 2L, 4L, 3L, 1L, 4L, 3L), .Label = c("1.7", 
    "4", "4.5", "5"), class = "factor")), .Names = c("Tank", 
"Core", "BCl", "BCu", "Mid", "TL", "SL"), row.names = c(NA, -9L
), class = "data.frame")

mapply 类似于 applylapply,但有多个参数:

首先,正如我在评论中提到的,我们需要将您的数据转换为数字。我这样做是为了转换除第二列以外的所有内容:

df[, -2] = lapply(df[, -2], as.character)
df[, -2] = lapply(df[, -2], as.numeric)

然后我们可以像这样使用 mapply 来生成序列:

seqs = mapply(FUN = function(a, b) {
      seq(from = a, to = b, by = .001)
  }, a = df$BCu, b = df$BCl)

将其放入数据框中似乎很麻烦,但如果您愿意,可以这样做:

df$seqs = seqs

如果是我,我可能会将其保留为数据框之外的向量列表。