在R中,如何基于现有列创建一个新的df列(与向量相比)?

xuo3flqw  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(99)

在R中,我有一个数据框和一个向量。数据框有一列日期(例如A列)。向量也包含日期。对于A列或向量,日期不一定是连续的(即几个连续的日期可以是1/4/23、1/17/23、2/4/23等)。
我想在数据框中创建一个新列(列B),该列等于(对于每一行)大于列A中日期的向量的最小值。也许更一般的说法是,我想基于与向量相比的现有列创建一个新数据框列。
我已经想出了如何使用函数/循环来完成这个任务,但它不是最简洁的。有没有一种更简单的方法可以不用循环来完成这个任务?dplyr解决方案将是理想的,因为这是我在代码的其他地方经常使用的,但任何帮助都将是非常感谢的。如果知道没有循环这是不可能的,这也将是很有帮助的。谢谢!

krcsximq

krcsximq1#

在dplyr中使用一个行方向的变异,将向量子集化为元素〉=你的日期列,排序,取第一个元素:

library(dplyr)

# example data
dat <- data.frame(
  columnA = as.Date(c("2023-01-04", "2023-01-17", "2023-02-04"))
)
vec <- as.Date(c("2023-01-01", "2023-03-01", "2023-01-04", "2023-01-30"))

dat %>%
  rowwise() %>%
  mutate(columnB = first(sort(vec[vec >= columnA]))) %>%
  ungroup()
# A tibble: 3 × 2
  columnA    columnB   
  <date>     <date>    
1 2023-01-04 2023-01-04
2 2023-01-17 2023-01-30
3 2023-02-04 2023-03-01

相关问题