【问题标题】:How to make a loop function to get the results and put them in the new columns in R如何制作循环函数来获取结果并将它们放入 R 中的新列中
【发布时间】:2021-09-03 05:42:43
【问题描述】:

我有一个如下所示的数据框,

 dat<- structure(list(Octagonplot = c(11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 61, 62, 63, 64, 71, 72, 73, 74, 81, 82, 83, 84, 91, 92, 93, 94, 101, 102, 103, 104, 111, 112, 113, 114, 121, 122, 123, 124, 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 61, 62, 63, 64, 71, 72, 73, 74, 81, 82, 83, 84, 91, 92, 93, 94, 101, 102, 103, 104, 111, 112, 113, 114, 121, 122, 123, 124, 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 61, 62, 63, 64, 71, 72, 73, 74, 81, 82, 83, 84, 91, 92, 93, 94, 101, 102, 103, 104, 111, 112, 113, 114, 121, 122, 123, 124), d13C = c(-27.822, -27.93, -27.927, -27.764, -28.081, -28.091, -28.553, -28.633, -27.996, -27.972, -27.664, -28.037, -28.211, -28.348, -28.5, -27.875, -28.331, -28.873, -28.609, -28.262, -27.569, -27.583, -27.305, -27.494, -27.484, -27.585, -27.368, -27.313, -27.894, -28.405, -27.296, -27.67, -27.175, -27.431, -27.382, -27.479, -28.059, -28.329, -28.285, -27.976, -27.564, -27.387, -27.958, -27.638, -28.087, -28.208, -28.513, -28.002, -27.977, -27.952, -27.647, -27.882, -29.181, -28.635, -29.131, -28.931, -28.42, -28.413, -27.993, -28.503, -29.54, -29.009, -29.197, -29.609, -29.346, -29.969, -29.798, -29.037, -27.854, -27.923, -27.976, -27.712, -27.769, -27.827, -27.735, -27.82, -28.345, -29.476, -28.387, -28.019, -27.307, -27.567, -27.429, -27.771, -28.044, -28.683, -28.786, -28.664, -27.653, -28.064, -28.036, -27.757, -28.323, -29.195, -28.828, -28.937, -27.9078297690006, -27.9386973277244, -27.7756066004902, -27.8411714524657, -28.7963592918008, -28.4522330354614, -28.8597856593141, -28.8113167816976, -28.1924531764532, NA, -27.824879800081, -28.2347160358722, -28.7498706023163, -28.7313297359698, -28.7365680482049, -28.7272468735994, -28.803582483867, -29.4363702389094, NA, -28.7054768643306, -27.7481689930581, -27.7535107262537, -27.6555760218728, NA, -27.6272638860929, -27.7069166950818, -27.5782961448598, -27.5234468773432, -28.1124586856048, -29.0179480728715, -27.8824806843723, -27.8693344400536, -27.2278831040908, -27.5051927317272, -27.4090338924322,-27.6583036975383,-28.0521215748621, -28.5076100126232, -28.5288005348874, -28.3745035897644, -27.6136332691194, NA, -28.0041637896659, -27.6963035708696, -28.1989533738283, -28.8230228029304, -28.7207578899079, -28.4489097046946), midpoint = c(2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5,2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5,2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7,8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7,8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7,8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2)), row.names = c(NA, -144L), class = c("tbl_df", "tbl","data.frame"))

我想在每个 Octagonplot 中找到线性关系,然后使用它们的线性关系计算中点值 ==5 时的 d13C 值。并为与 Octagonplot 编号一致的输出数据创建一个新的数据框。这是我的 Octagonplot '124' 代码,但我想知道如何从 11,12,13,14,21,22,....123,124 循环所有这些。

target1 <- c("124")
C124<- filter(dat, Octagonplot%in% target1) 

mod124<- lm(C124$d13C~C124$midpoint)
summary(mod124)

a <- coef(summary(mod124))[2]
b <- coef(summary(mod124))[1]

y124<- a*5+b
y124 

希望有人能提供帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    这可能是您正在寻找的。您将丢失示例输出中的d13Cmidpoint...5,但我不清楚您是如何选择它们的。此外,midpoint...5 永远不会等于 5,所以我假设这是您已经应用的过滤器并使用了所有中点值。

    dat <- structure(list(Octagonplot = c(11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 61, 62, 63, 64, 71, 72, 73, 74, 81, 82, 83, 84, 91, 92, 93, 94, 101, 102, 103, 104, 111, 112, 113, 114, 121, 122, 123, 124, 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 61, 62, 63, 64, 71, 72, 73, 74, 81, 82, 83, 84, 91, 92, 93, 94, 101, 102, 103, 104, 111, 112, 113, 114, 121, 122, 123, 124, 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 61, 62, 63, 64, 71, 72, 73, 74, 81, 82, 83, 84, 91, 92, 93, 94, 101, 102, 103, 104, 111, 112, 113, 114, 121, 122, 123, 124), d13C = c(-27.822, -27.93, -27.927, -27.764, -28.081, -28.091, -28.553, -28.633, -27.996, -27.972, -27.664, -28.037, -28.211, -28.348, -28.5, -27.875, -28.331, -28.873, -28.609, -28.262, -27.569, -27.583, -27.305, -27.494, -27.484, -27.585, -27.368, -27.313, -27.894, -28.405, -27.296, -27.67, -27.175, -27.431, -27.382, -27.479, -28.059, -28.329, -28.285, -27.976, -27.564, -27.387, -27.958, -27.638, -28.087, -28.208, -28.513, -28.002, -27.977, -27.952, -27.647, -27.882, -29.181, -28.635, -29.131, -28.931, -28.42, -28.413, -27.993, -28.503, -29.54, -29.009, -29.197, -29.609, -29.346, -29.969, -29.798, -29.037, -27.854, -27.923, -27.976, -27.712, -27.769, -27.827, -27.735, -27.82, -28.345, -29.476, -28.387, -28.019, -27.307, -27.567, -27.429, -27.771, -28.044, -28.683, -28.786, -28.664, -27.653, -28.064, -28.036, -27.757, -28.323, -29.195, -28.828, -28.937, -27.9078297690006, -27.9386973277244, -27.7756066004902, -27.8411714524657, -28.7963592918008, -28.4522330354614, -28.8597856593141, -28.8113167816976, -28.1924531764532, NA, -27.824879800081, -28.2347160358722, -28.7498706023163, -28.7313297359698, -28.7365680482049, -28.7272468735994, -28.803582483867, -29.4363702389094, NA, -28.7054768643306, -27.7481689930581, -27.7535107262537, -27.6555760218728, NA, -27.6272638860929, -27.7069166950818, -27.5782961448598, -27.5234468773432, -28.1124586856048, -29.0179480728715, -27.8824806843723, -27.8693344400536, -27.2278831040908, -27.5051927317272, -27.4090338924322,-27.6583036975383,-28.0521215748621, -28.5076100126232, -28.5288005348874, -28.3745035897644, -27.6136332691194, NA, -28.0041637896659, -27.6963035708696, -28.1989533738283, -28.8230228029304, -28.7207578899079, -28.4489097046946), midpoint...5 = c(2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5,2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5,2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7,8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7,8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7,8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 8.7, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2)), row.names = c(NA, -144L), class = c("tbl_df", "tbl","data.frame"))
    
    get_y <- function(df) {
      mod<- lm(df$d13C ~ df$midpoint)
      a <- coef(summary(mod))[2]
      b <- coef(summary(mod))[1]
      y <- a * 5 + b
      out <- data.frame(Octagonplot = unique(df$Octagonplot), y = y)
      out
    }
    
    result <- lapply(unique(dat$Octagonplot), function(Oct)
      get_y(dat[dat$Octagonplot == Oct, ]))
    
    result <- do.call(rbind.data.frame, result)
    
    head(result)
    #   Octagonplot         y
    # 1          11 -27.88239
    # 2          12 -27.93747
    # 3          13 -27.81907
    # 4          14 -27.81372
    # 5          21 -28.54322
    # 6          22 -28.32195
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 2021-03-08
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多