【发布时间】:2014-11-19 17:28:17
【问题描述】:
我正在尝试用 R 解决 DSC(差示扫描量热法)数据,但似乎遇到了一些麻烦。在我的实验室里,这一切过去都是在 Origin 或 Qtiplot 中繁琐地完成的。但我想知道是否有另一种方法可以批量完成。但结果并不顺利。例如,也许我使用了我的 data.frame 的错误名称,代码
dat$0.5min
Error: unexpected numeric constant in "dat$0.5"
无法访问我的数据。
所以下面是我的目的的完整描述,提前谢谢你!
DSC数据是这样的(我把CSV文件存到我的GoogleDrive Link) :
T1 0.5min T2 1min
40.59 -0.2904 40.59 -0.2545
40.81 -0.281 40.81 -0.2455
41.04 -0.2747 41.04 -0.2389
41.29 -0.2728 41.29 -0.2361
41.54 -0.2553 41.54 -0.2239
41.8 -0.07 41.8 -0.0732
42.06 0.1687 42.06 0.1414
42.32 0.3194 42.32 0.2817
42.58 0.3814 42.58 0.3421
42.84 0.3863 42.84 0.3493
43.1 0.3665 43.11 0.3322
43.37 0.3438 43.37 0.3109
43.64 0.3265 43.64 0.2937
43.9 0.3151 43.9 0.2819
44.17 0.3072 44.17 0.2735
44.43 0.2995 44.43 0.2656
44.7 0.2899 44.7 0.2563
44.96 0.2779 44.96 0.245
事实上,我已经将数据合并到一个 data.frame 中,希望我可以调整它并做进一步的事情。 命令是:
dat<-read.csv("Book1.csv",header=F)
colnames(dat)<-c('T1','0.5min','T2','1min','T3','2min','T4','4min','T5','8min','T6','10min',
'T7','20min','T8','ascast1','T9','ascast2','T10','ascast3','T11','ascast4',
'T12','ascast5'
)
所以实际上 dat 是一个具有 1163 obs 的 data.frame。 24 个变量。
T1,T2,T3.....T12 是指样品进行 DSC 测试的温度,尽管在相同的时间间隔内,由于机器的不稳定性,它们确实略有不同。
T1~T12 的列名是机器记录的不同热处理时间的 Heat Flow,ascast1~ascast5 表示没有对样品做任何检查机器的精度。
现在我需要执行以下操作:
因为T1~T2是摄氏度,我需要把它们换成开尔文度数,即每条数据加273.16。
-
选择两个温度来比较结果,即 Ts=180.25,Te=240.45(均以摄氏度讨论,我已经看过 Qtiplot 以确保)。为了清楚起见,我列出了两个温度和前 6 列数据。
T1 0.5min T2 1min T3 2min T4 4min
180.25 -0.01710000 180.25 -0.01780000 180.25 -0.02120000 180.25 -0.02020000
。 . . .
。 . . .
240.45 0.05700000 240.45 0.04500000 240.45 0.05780000 240.45 0.05580000
Ts 中的所有热流应该是相同的,为了方便可以设为 0。所以根据0.5min、1min、2min、4min、8min、10min、20min、ascas1~ascast5等不同时间的Heat Flow值的不同,所有Heat Flow值都应该减去Ts中的Heat Flow值。
-
对于以 Te 为单位的热流,应调整该值以确保所有以 Te 为单位的热流数据相同。目的如下,(1)计算Te中12个热流数据的平均值。让我们使用 Hmean 作为平均热流。所以 Hmean 是所有热流应该是的值。 (2)对于0.5min列的数据,我用col("0.5min")表示,线性变换公式如下:
col("0.5min")-[([0.05700000-(-0.01710000)]-Hmean)/(Te-Ts)]*(col(T1)-Ts)
其实 [0.05700000-(-0.01710000)] 是在第 2 步完成的,但我写出来供大家参考。这个公式用于不同的T1~T12对和列,如(T1,0.5min),(T2,1min),(T3,1min).....都是12对。
- 现在我们可以将 12 对数据以 180~240 的间隔(也以摄氏度为单位)绘制在同一个图上,以放大 DSC 不同扫描之间差异的细节。
我被这个问题困扰了 2 天,所以我返回 stackoverflow 寻求帮助。
谢谢!
【问题讨论】:
-
到底是什么问题?您不能在开始时引用所述列吗?还是您提到的 4 个步骤之一有问题?
-
抱歉没有及时回复?这确实是我的问题之一。以下步骤的详细描述是寻求在 R 中快速完成的任何建议和 cmets?例如,当我阅读 plyr 示例时,我发现了很多关于如何根据名称处理数据的建议,但是如果需要处理的列太多,如何处理它们?我的意思是使用列名作为索引不是那么明智吗?
标签: r