r - 条件数据操作任务
问题描述
假设我有一个数据框如下:
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))
解决方案
可能的解决方案
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)
推荐阅读
- c++ - 添加自定义 TensorFlow OP
- rust - 您如何将文本文件中的行读入 i32s 元组的向量?
- java - Jooq 使用生成的代码和 distinctOn 选择查询
- python - 使用密码学的 Python 解密会添加随机字符
- php - 如何一次使用多个 if 语句?
- python - 试图用 Python 找到 LCM(最小公倍数)
- json - 如何在 Asp.net Core 中使用 Json
- vue.js - Vuex:令牌不存储在本地存储中
- javascript - 自定义 UseLayoutEffect 钩子在 React 中为边界框计算触发了太多次
- python - pd.merge 未合并列值