【发布时间】:2021-10-20 17:25:54
【问题描述】:
在 R 数据框dt_df 中,我想将具有以下序列中的值的所有行保留为新数据框。
我可以拥有dt_diff -1 到 20 之间的任何数字。
现在,我想从1(前一天)开始检查dt_diff 是否有1。如果有1,过滤dt_diff中所有带有1的行,将其保留为新的数据框并停止处理,如果没有1,检查是否有2,如果有@987654331 @ 保留所有带有2 的行作为新数据框并停止处理,依此类推,直到20。如果1到20之间没有任何值,则检查是否有0,如果有0,则保留0的行作为新的数据框,并停止处理。如果没有 0 或 1 到 20 之间的任何值,则检查是否存在 -1 并将所有带有 -1 的行保留为新数据框。我怎样才能做到这一点?这是示例数据和不成功的 for 循环,if 条件。
dt_df <- structure(list(date = structure(c(12241, 12241, 12257, 12257,
12257, 12257, 12257, 12257, 12257, 12257, 12259), class = "Date"),
ref_date = structure(c(12259, 12259, 12259, 12259, 12259,
12259, 12259, 12259, 12259, 12259, 12259), class = "Date")), row.names = c(NA,
-11L), class = c("tbl_df", "tbl", "data.frame"))
dt_df
dt_df$dt_diff <- as.numeric(dt_df$ref_date -dt_df$date)
pbl_dt_seq <- seq(-1, 20, 1)
pbl_dt_seq
for (i in 1:length(pbl_dt_seq)) {
i <- 2 # start with number 1
if(any(dt_df$dt_diff) == i ){
retain_dt <- dt_df %>%
filter(dt_diff == i)
retain_dt
break
}
if(any(dt_df$dt_diff) ==i+1 ){
retain_dt <-dt_df%>%
filter(dt_diff == i+1)
retain_dt
break
}
}
【问题讨论】:
-
split(dt_df, dt_df$dt_diff)做你想做的事吗? -
不,因为在这个例子中我只想保留
dt_df$dt_diff =2' as a new data frame and ignore others. But this2` 可以改变并且不确定如何按照问题中提到的顺序保留。
标签: r dataframe for-loop if-statement tidyverse