首页 > 解决方案 > 条件数据操作任务

问题描述

假设我有一个数据框如下:

df<-data.frame(suggested = c(195, 0, 195, 0, 0, 195, 195),
               index = c(1:7))

我还有另一个日期向量。例如,假设它是一个月中的某一天:

dates<- c(3, 9, 15)

我想在名为 prev_dates 的数据框中创建一个新变量,其中来自日期向量的三个值放置在建议的前 3 个实例中!= 0,然后该变量的所有其他值都是 NA。

我确信有一个相当简单的方法可以做到这一点,但今天早上我需要再补充几百毫克的咖啡因来解决这个问题。谢谢您的帮助!

编辑澄清:这就是我希望 df 最后的样子:

df<-data.frame(suggested = c(195, 0, 195, 0, 0, 195, 195),
               index = c(1:7),
               prev_dates= c(3, NA, 9, NA, NA, 15, NA))

标签: r

解决方案


可能的解决方案

df<-data.frame(suggested = c(195, 0, 195, 0, 0, 195, 195),
               index = c(1:7))

dates<- c(3, 9, 15)

library(tidyverse)

df %>% 
  filter(suggested != 0) %>% 
  slice_head(n = length(dates)) %>% 
  add_column(dates) %>% 
  right_join(df) %>% 
  arrange(index)
#> Joining, by = c("suggested", "index")
#>   suggested index dates
#> 1       195     1     3
#> 2         0     2    NA
#> 3       195     3     9
#> 4         0     4    NA
#> 5         0     5    NA
#> 6       195     6    15
#> 7       195     7    NA

reprex 包于 2021-03-29 创建(v1.0.0)

数据表

library(data.table)

df<-data.frame(suggested = c(195, 0, 195, 0, 0, 195, 195),
               index = c(1:7))

dates<- c(3, 9, 15)

setDT(df)
merge(df, first(df[suggested != 0,  ], n = length(dates))[, dates := dates], all.x = T)[order(index), ]
#>    suggested index dates
#> 1:       195     1     3
#> 2:         0     2    NA
#> 3:       195     3     9
#> 4:         0     4    NA
#> 5:         0     5    NA
#> 6:       195     6    15
#> 7:       195     7    NA

reprex 包于 2021-03-29 创建(v1.0.0)


推荐阅读