R 如何基于循环中的现有数据帧填充新数据帧
我想通过计算多个时间间隔的斜率来创建一个新的数据帧(b)。下面是原始数据(a)的子集和用于生成所需数据帧(b)的代码。我想分别以$RunTime 0.393-0.443、0.000-0.042和0.042-0.093的间隔确定$O2_229和$O2_空白的斜率 以下是我当前使用的代码:R 如何基于循环中的现有数据帧填充新数据帧,r,loops,dataframe,R,Loops,Dataframe,我想通过计算多个时间间隔的斜率来创建一个新的数据帧(b)。下面是原始数据(a)的子集和用于生成所需数据帧(b)的代码。我想分别以$RunTime 0.393-0.443、0.000-0.042和0.042-0.093的间隔确定$O2_229和$O2_空白的斜率 以下是我当前使用的代码: a <- structure(list(RunTime = c(0, 0.042, 0.093, 0.143, 0.193, 0.243, 0.293, 0.343, 0.393, 0.443, 0.49
a <- structure(list(RunTime = c(0, 0.042, 0.093, 0.143, 0.193, 0.243,
0.293, 0.343, 0.393, 0.443, 0.493, 0.543, 0.593, 0.643, 0.693,
0.743, 0.793, 0.842, 0.893, 0.943), O2_229 = c(223.479, 222.774,
222.185, 221.557, 221.335, 220.879, 220.734, 220.396, 220.295,
219.996, 219.859, 219.407, 219.33, 218.899, 218.725, 218.495,
218.449, 217.833, 217.805, 217.856), O2_35 = c(189.719, 189.479,
189.063, 188.843, 188.498, 188.237, 188.262, 187.959, 187.856,
187.786, 187.512, 187.086, 186.957, 186.874, 186.589, 186.559,
186.312, 186.267, 186.039, 185.947), O2_230 = c(189.894, 189.326,
188.835, 188.786, 188.296, 188.064, 187.634, 187.417, 187.001,
187.024, 186.684, 186.488, 186.162, 185.956, 185.931, 185.701,
185.604, 185.491, 185.22, 185.384), O2_36 = c(191.005, 190.59,
190.155, 189.836, 189.505, 189.103, 188.751, 188.343, 188.183,
187.785, 187.563, 187.442, 186.949, 186.684, 186.486, 186.215,
185.942, 185.858, 185.689, 185.567), O2_Blank = c(193.543, 193.315,
192.927, 192.846, 192.373, 191.749, 191.284, 190.876, 190.44,
190.196, 189.89, 189.381, 189.131, 188.841, 188.647, 188.631,
188.315, 188.358, 188.062, 188.221)), row.names = c(NA, 20L), class
= "data.frame")
b <- data.frame("Light" = c("0%", "10%", "20%"),
"229" = c((a$O2_229[a$RunTime == "0.443"] -
a$O2_229[a$RunTime == "0.393"])/(0.443 - 0.393),
(a$O2_229[a$RunTime == "0.042"] -
a$O2_229[a$RunTime == "0"])/(0.042 - 0),
(a$O2_229[a$RunTime == "0.093"] -
a$O2_229[a$RunTime == "0.042"])/(0.093 - 0.042)),
"Blank" = c((a$O2_Blank[a$RunTime == "0.443"] -
a$O2_Blank[a$RunTime == "0.393"])/(102.643 - 92.043),
(a$O2_Blank[a$RunTime == "0.042"] -
a$O2_Blank[a$RunTime == "0"])/(0.042 - 0),
(a$O2_Blank[a$RunTime == "0.093"] -
a$O2_Blank[a$RunTime == "0.042"])/(0.093 - 0.042)))
我很确定我遗漏了一些东西:这些轻百分比-为什么你要使用这些值来计算0%线对我来说是个谜-但我认为这是你想要使用的可伸缩策略,无论是哪种方式:
library(scales)#表示百分比()
图书馆(tidyverse)
库(magrittr)#用于管道别名,如divide_by()
#>
#>附加包:“magrittr”
#>以下对象被“package:purrr”屏蔽:
#>
#>设置名称
#>以下对象已从“package:tidyr”屏蔽:
#>
#>提取
a我不清楚你是如何总结的,但是<代码>运行时==“0.443”
至少以两种方式中断。由于这些值实际上是数值,因此您确实不能依靠相等性测试来匹配特定值,而是(可能)在公差范围内寻找绝对差异(例如,abs(运行时-0.443)<1e-8
)。(为什么?请看,或者谷歌IEEE-754。这是一个困扰所有编程语言的浮点问题。)您好,谢谢您的输入。我认为更好的解释方法是:我想确定每个运行时间间隔的斜率(轻%)。那么,o2_229在光照10%(运行时为0-0.042)时的斜率是多少,依此类推,对于每种强度。您的预期输出是什么?请尝试澄清这个问题,因为它仍然非常模糊您想要实现的目标…您缺少了一个已编辑的-很抱歉造成混淆。谢谢-当运行时间间隔长度不同时,这将如何应用?为了简单起见,我没有将其包含在示例中,但我有一些比其他示例更长的灯光%。0%的值是因为灯光在最末端关闭。i、 e.每种强度的运行时持续时间不同,只要行的顺序正确,就应该以这种方式适当处理不同的间隔大小。行与行之间的差异w.r.t.每个变量将除以行的差异w.r.t.运行时。不过,运行时(至少是行号)和灯光%之间的特定关系会有所帮助。不确定每次+10%是否合适。当然,感谢您的帮助-tidyverse的新功能。0% = 0.000-0.042, 10% = 0.042-0.093, 20% = 0.093-0.193, 30% = 0.193-0.293, 40% = 0.293-0.343, 50% = 0.343-0.443, 60% = 0.443-0.593, 70% = 0.593-0.743, 80% = 0.743-0.943. 所以他们都不一样。
Light 229 Blank
0% -0.02820755 -0.02301887
10% -16.78571429 -5.42857143
20% -11.54901961 -7.60784314