如何使用与单独数据集对应的值在数据集中创建新列

时间:2015-05-15 16:38:02

标签: r loops date

我有两个不同的csv文件,一个名为CA_Storms,一个名为CA_adjCA_Storms有许多风暴事件的开始和结束日期/时间(在一列中),CA_adj有一个DateTime列,其中包含数千个日期/时间。我想看看CA_adj中的任何日期/时间是否与CA_Storms中的任何风暴事件相对应。为此,我尝试在CA_adj标题Storm_ID中创建一个新列,根据CA_Storms中的风暴开始和结束时间/日期确定与之对应的风暴。< / p>

这是我目前正在经历的过程:

#Make a value to which the csv files are attached
CA_Storms <- read.csv(file = "CA_Storms.csv", header = TRUE,       stringsAsFactors = FALSE)
CA_adj <- read.csv(file = "CA_adj.csv", header = TRUE, stringsAsFactors

#strptime function (do this for both data sets)
CA_adj$DateTime1 <- strptime(CA_adj$DateTime, format = "%m/%d/%Y %H:%M")
CA_Storms$Start.time1 <- strptime(CA_Storms$Start.time, format = "%m/%d/%Y  %H:%M")
CA_Storms$End.time1 <- strptime(CA_Storms$End.time, format = "%m/%d/%Y %H:%M")

#Make a new column into CA_adj that says Storm ID. Have it by 
#default hold NAs.
CA_adj$Storm_ID <- NA

#Write a which statement to see if it meets the conditions of greater than
#or equal to start time or less than or equal to end time. Put this through a 
#for loop to apply it to every row within CA_adj$DateTime1

    for (i in nrow(CA_adj$DateTime1))
    { 
      CA_adj$DateTime1[which(CA_adj$DateTime1 >= CA_Storms$Start.time1 | CA_adj$DateTime1 <= CA_Storms$End.time1), "Storm_ID"]
    }

这并没有给我任何错误,但它也没有替换我所做的Storm_ID列中的任何值。在“价值观”下的全球环境中,它现在只是说:i is NULL(empty)。我很确定在for循环中缺少的是i,但我不知道放在哪里。我还认为另一个问题是它不知道用Storm_ID列替换NA的值是什么。我希望用正确的风暴ID替换NA,这些风暴ID与风暴日期相对应(CA_Storms$Start.time1CA_Storms$End.Time1)。对于CA_adj内的日期/时间不适用于风暴约会,我只想让它继续说NA。

非常感谢任何有关如何执行此操作的指导。我是R的新手,我一直在努力教给自己,这可以让我自己弄清楚如何做这些事情有点困难。

非常感谢!

1 个答案:

答案 0 :(得分:0)

为什么不看看lubridate包。它将允许您创建时间/日期间隔,然后可以根据%在%内的特定时间/日期进行测试。您的代码应该更简单。

您确实需要使用循环索引,还需要对CA_adj $ StormID进行分配。我不确定您是否还可以在CA_Storms间隔中拥有多个CA_adj条目。

# make a lubridate interval in CA_Storms
# make CA_DateTime a lubridate 
# or stick with the longer code...

# loop through all CA_adj

for (i in nrow(CA_adj)) {
  CA_adj$StormID[i] <- CA_Storms$StormID[CA_adj$DateTime %within% CA_Storms$interval]
}