【发布时间】:2012-02-14 17:16:13
【问题描述】:
我正在尝试在 R 中编写一个嵌套的 for 循环,但遇到了问题。我进行了尽可能多的研究,但找不到(或理解)我需要的帮助。我对 R 相当陌生,因此对于此循环的任何建议将不胜感激,或者如果有更简单、更优雅的方式!
我已经为许多地方(我将它们称为站点)生成了一个每日温度文件,文件列的设置如下:
年月日 unix_time site_a site_b site_c site_d ... on and on
对于每个站点(每列内),我想遍历温度值并创建新列(或新数据框),其数字(生理速率)与这些温度范围相对应。 (例如,低于 6.25 度的温度为 -1.33,6.25 到 8.75 之间的温度为 0.99,等等)。我创建了一个循环,对单列数据执行此操作。例如:
for(i in 1:dim(data)[1]){
if (data$point_a[i]<6.25) data$rate_point_a[i]<--1.33 else
if (data$point_a[i]>=6.25 && data$point_a[i]<8.75) data$rate_point_a[i]<-0.99 else
if (data$point_a[i]>=8.75 && data$point_a[i]<11.25) data$rate_point_a[i]<-3.31 else
if (data$point_a[i]>=11.25 && data$point_a[i]<13.75) data$rate_point_a[i]<-2.56 else
if (data$point_a[i]>=13.75 && data$point_a[i]<16.25) data$rate_point_a[i]<-1.81 else
if (data$point_a[i]>=16.25 && data$point_a[i]<18.75) data$rate_point_a[i]<-2.78 else
if (data$point_a[i]>=18.75 && data$point_a[i]<21.25) data$rate_point_a[i]<-3.75 else
if (data$point_a[i]>=21.25 && data$point_a[i]<23.75) data$rate_point_a[i]<-1.98 else
if (data$point_a[i]>=23.75 && data$point_a[i]<26.25) data$rate_point_a[i]<-0.21
}
上面的代码为我提供了一个名为“rate_site_a”的新列,其中包含我的生理速率。我遇到的麻烦是将这个循环嵌套到另一个贯穿所有列的循环中。我已经尝试过诸如:
for (i in 1:ncol(data)){
#for each row in that column
for (s in 1:length(data)){
if ([i]<6.25) rate1[s]<--1.33 else ...
我想我不知道如何让“if else”语句引用正确的位置。我知道我不能将“速率”列添加到现有数据框中,因为这会在我通过循环时增加我的 ncol,所以需要将它们放入另一个数据框(尽管不认为这是我的主要问题)。我将有很多很多点要解决,并且不想一次做一个,因此我尝试嵌套循环。
任何帮助将不胜感激。如果有帮助,这里是一些示例数据的链接。 http://dl.dropbox.com/u/17903768/AVHRR_output.txt提前致谢!
【问题讨论】:
标签: r for-loop nested-loops