有条件地填充 R 数据框列,与参考列的偏移量

发布于 2024-12-29 14:08:10 字数 648 浏览 1 评论 0原文

我有一个名为 rates_df 的数据框,我向其中添加一个额外的列,并根据同一 df 中另一列的内容有条件地填充,其中 1

prices_df$itd_1 <- c(NA)
prices_df$itd_1 <- with( prices_df , ifelse(V2.1==1 , 1, NA) )

在最后一列中给出 1 但是

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,1
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA

,我也想做to 是偏移此条件填充,例如,输出将是比参考列晚两行的列中的 1,或者可能早或晚 x 行,例如

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1

如何调整给定的代码以实现此偏移条件填充?

I have a dataframe called prices_df to which I add an extra column and conditionally fill, based on the contents of another column in the same df, with a 1

prices_df$itd_1 <- c(NA)
prices_df$itd_1 <- with( prices_df , ifelse(V2.1==1 , 1, NA) )

which gives a 1 in the last column thus

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,1
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA

However, what I would also like to do to is offset this conditional fill such that the output will be, for example, 1 in the column two rows later than the reference column, or perhaps x rows earlier or later, e.g.

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1

How can I adjust the given code to achieve this offset conditional filling?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷迭香的记忆 2025-01-05 14:08:10

最好的方法是:

  1. 创建一个时间序列对象(我更喜欢动物园)
  2. 创建带有滞后(或您所说的偏移量)的额外列
  3. 将所有内容合并在一起

    prices_df <- read.table(text="2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA
    2005-11-17,不,不,不,不,不,不,不,不,不,不,不,不,不,不
    2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA", header=F, sep=",")
    
    图书馆(动物园)
    prices_df.zoo <-zoo(prices_df[,-1],as.Date(prices_df[,1]))
    itd_1 <- lag(with( rates_df.zoo , ifelse(V6==1 , 1, NA) ),-2) #lag = -2
    prices_df.zoo <-merge(prices_df.zoo, itd_1)
    
    >价格_df.zoo
               V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 itd_1
    2005-11-16 不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不
    2005-11-17 呐呐呐呐呐呐呐呐呐呐呐呐呐呐呐
    2005-11-18 呐呐呐呐呐呐呐呐呐呐呐呐呐呐呐1
    

Best way is to:

  1. Create a time series object (I prefer zoo)
  2. Create your extra column with a lag (or offset as you call it)
  3. Merge everything together

    prices_df <- read.table(text="2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA
    2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
    2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA", header=F, sep=",")
    
    library(zoo)
    prices_df.zoo <-zoo(prices_df[,-1],as.Date(prices_df[,1]))
    itd_1 <- lag(with( prices_df.zoo , ifelse(V6==1 , 1, NA) ),-2) #lag = -2
    prices_df.zoo <-merge(prices_df.zoo, itd_1)
    
    > prices_df.zoo
               V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 itd_1
    2005-11-16 NA NA NA NA  1 NA NA NA  NA  NA  NA  NA    NA
    2005-11-17 NA NA NA NA NA NA NA NA  NA  NA  NA  NA    NA
    2005-11-18 NA NA NA NA NA NA NA NA  NA  NA  NA  NA     1
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文