【发布时间】:2017-02-28 18:55:47
【问题描述】:
我需要在我的主数据框中创建一个“标记”列,用于标记日期在特定时间范围内的行。该时间范围来自第二个数据帧。我想我只是停留在 ifelse(或 if)语句上,因为标志列中有 NA。也许 ifelse 不是要走的路。以下是一些示例数据:
# main data frame
date <- seq(as.Date("2014-07-21"), as.Date("2014-09-11"), by = "day")
group <- letters[1:4]
datereps <- rep(date, length(group))
groupreps <- rep(group, each = length(date))
value <- rnorm(length(datereps))
df <- data.frame(Date = datereps, Group = groupreps, Value = value)
# flag time period data frame
flag <- data.frame(Group = c("b", "d"),
start = c("2014-08-01", "2014-08-26"),
end = c("2014-08-11", "2014-09-01"))
# Merge flag dates into main data frame
df2 <- merge(df, flag, by = "Group", all.x = T)
# Execute ifelse statement on each row
df2$flag <- "something"
df2$flag <- ifelse(df2$Date >= as.Date(df2$start) & df2$Date <= as.Date(df2$end), "flag", "other")
结果是,在指定“开始”和“结束”日期的行中,“标志”和“其他”被标记,但“开始”和“结束”为 NA,我得到 @ 的 Na 值987654322@。即使我使用"something" 启动df2$flag,也会发生这种情况。对于所有未定义为"flag" 的值,我想要"other"。查看第 50:68 行。
df2[50:68,]
【问题讨论】:
-
当您说“不起作用”时,是 R 抛出错误,还是返回的不是您想要的?
标签: r if-statement