我有一个包含两列(均为日期)和一百万行的数据框。我必须比较第三列中的日期和返回值。即,如果 A 列中的日期大于 B 列中的日期,则在 C 列中返回 1。

提前致谢 :)


base

DF$C <- as.numeric(DF$A > DF$B)

dplyr

DF %>% 
  mutate(C = as.numeric(A > B))

library(data.table)
dt <- as.data.table(dt)
dt$A <- as.Date(dt$A)
dt$B <- as.Date(dt$B)

您可以尝试以下两种方法:

dt[, C := ifelse(A > B, 1, 0)]

或者

dt[, C := 0][A > B, C := 1]

dt[, C := 1][A <= B, C := 0]在第二种方式中,您可以通过检查哪个具有较少的 obs 来更改为。

也许您需要提供一些可重现的示例。


你试过什么?如果你的数据设置正确,这在 R 中很容易实现,你能展示一个可重现的数据示例吗?

DF$C = DF$A > DF$B?

是的,我的日期是使用 as.date 命令正确设置的。我以前从来没有做过相应的比较和返回值。

@MichaelChirico 仅此一项会返回 1 还是零?我会尝试,但我的 rstudio 目前正在大型数据帧上运行任务

@stef1 您可以启动一个新的 Rstudio 会话并在示例数据上进行尝试。

这些是实现您可以在 R 中直接完成的事情的非常迂回的方法。

我知道这是迂回的。但是,如果数据只包含百万行,data.table结合起来也许就可以了。这道题还有其他办法做超大数据吗?

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部