我有两个不同的csv文件,一个名为CA_Storms
,一个名为CA_adj
。 CA_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.time1
和CA_Storms$End.Time1)
。对于CA_adj
内的日期/时间不适用于风暴约会,我只想让它继续说NA。
非常感谢任何有关如何执行此操作的指导。我是R的新手,我一直在努力教给自己,这可以让我自己弄清楚如何做这些事情有点困难。
非常感谢!
答案 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]
}