我的矩阵包含四列,另一个矩阵包含相同的四列。第一个是每年的每日最高金额以及它发生的月份和日期。第二个有一年,一个月和一天,在我的场地附近经过热带气旋及其引起的最大降雨量(SI_SP_MAX)。我想在rain.max中创建一个与最大值相关的第五列。我希望这个列由0和1组成。 1表示热带气旋是否导致给定年份的每日最大值,如果不是则表示0。我尝试使用if else语句执行此操作,但第五列仅包含0。我需要检查年,月和日,不知道如何去做。 前几行数据是:
rain.max
Year Month Day Max_mm
1941 1 4 86.4
1942 2 11 115.8
1943 3 5 148.3
1944 3 8 61.5
1945 1 9 61.7
SI_SP_MAX
Year Month Day Max_mm Basin
1942 2 11 115.8 SI
1943 3 5 148.3 SI
1944 3 8 61.5 SI
1948 4 11 106.9 SI
1953 1 2 105.4 SI
由于
答案 0 :(得分:1)
这是一种可能性:
首先我们使用merge
来匹配信息:
temp <- merge(rain.max, SI_SP_MAX, by=c("Year", "Month", "Day"), all.x=TRUE)
# Year Month Day Max_mm.x Max_mm.y Basin
#1 1941 1 4 86.4 NA <NA>
#2 1942 2 11 115.8 115.8 SI
#3 1943 3 5 148.3 148.3 SI
#4 1944 3 8 61.5 61.5 SI
#5 1945 1 9 61.7 NA <NA>
然后我们比较列:
rain.max$cyclone <- temp$Max_mm.x == temp$Max_mm.y
rain.max$cyclone[is.na(rain.max$cyclone)] <- FALSE
# Year Month Day Max_mm cyclone
#1 1941 1 4 86.4 FALSE
#2 1942 2 11 115.8 TRUE
#3 1943 3 5 148.3 TRUE
#4 1944 3 8 61.5 TRUE
#5 1945 1 9 61.7 FALSE
如果您愿意,可以在之后将逻辑值转换为整数,但我不推荐它。
答案 1 :(得分:0)
尝试
rain.max <- structure(list(Year = 1941:1945, Month = c(1L, 2L, 3L, 3L, 1L
), Day = c(4L, 11L, 5L, 8L, 9L), Max_mm = c(86.4, 115.8, 148.3,
61.5, 61.7)), .Names = c("Year", "Month", "Day", "Max_mm"), class = "data.frame", row.names = c(NA, -5L))
SI_SP_MAX <- structure(list(Year = c(1942L, 1943L, 1944L, 1948L, 1953L), Month = c(2L,
3L, 3L, 4L, 1L), Day = c(11L, 5L, 8L, 11L, 2L), Max_mm = c(115.8,
148.3, 61.5, 106.9, 105.4), Basin = structure(c(1L, 1L, 1L, 1L,
1L), .Label = "SI", class = "factor")), .Names = c("Year", "Month",
"Day", "Max_mm", "Basin"), class = "data.frame", row.names = c(NA,
-5L))
library(plyr)
subset(
transform(
join(rain.max, SI_SP_MAX, by=c("Year", "Month", "Day", "Max_mm"), type="left"),
indx_max=(!is.na(Basin))+0),
select=-Basin)
或
library(dplyr)
left_join(rain.max, SI_SP_MAX, by=c("Year","Month","Day", "Max_mm"))%>%
mutate(indx_max=(!is.na(Basin))+0) %>%
select(-Basin)