【问题标题】:Problem to create a new columns in dataframe with lag在滞后的数据框中创建新列的问题
【发布时间】:2021-12-09 05:12:22
【问题描述】:

我有一个简单的 data_frame,如下所示:

块引用

             timestamp   H_crops H_Tower
1     2021-01-01 00:00:00 0.1000000     2.1
2     2021-01-01 00:30:00 0.1000076      NA
3     2021-01-01 01:00:00 0.1000152      NA
4     2021-01-01 01:30:00 0.1000227      NA
5     2021-01-01 02:00:00 0.1000303      3
6     2021-01-01 02:30:00 0.1000379      NA
7     2021-01-01 03:00:00 0.1000455      NA
8     2021-01-01 03:30:00 0.1000530      NA
9     2021-01-01 04:00:00 0.1000606      10
10    2021-01-01 04:30:00 0.1000682      NA

Blockquote

我想得到以下结果:

                  timestamp   H_crops H_Tower diff
1     2021-01-01 00:00:00 0.1000000     2.1  2.1
2     2021-01-01 00:30:00 0.1000076      NA  2.1
3     2021-01-01 01:00:00 0.1000152      NA  2.1
4     2021-01-01 01:30:00 0.1000227      NA  2.1
5     2021-01-01 02:00:00 0.1000303       3   3
6     2021-01-01 02:30:00 0.1000379      NA   3
7     2021-01-01 03:00:00 0.1000455      NA   3
8     2021-01-01 03:30:00 0.1000530      NA   3
9     2021-01-01 04:00:00 0.1000606      10   10
10    2021-01-01 04:30:00 0.1000682      NA   10

我用 dplyr 试试这个:

group_by(timestamp)
  arrange(timestamp)
    mutate(data_glob3, diff= ifelse ( is.na(data_glob3[,"H_Tower"]),lag(H_Tower),data_glob3[,"H_Tower"]))

但结果并不好。它应该使用 diff 的滞后,但这是不可能的。 你能帮帮我吗? 非常感谢!

【问题讨论】:

  • 试试 tidyr::fill()

标签: r dplyr lag


【解决方案1】:

目前还不清楚你想用那里的group_byarrange 函数做什么。

我将@Karthik S 的建议具体化,因为您是新手,可能不知道如何应用它。

library(tidyverse)

mydat<- 
  read_table2(
  "timestamp H_crops H_Tower
2021-01-01 0.1000000     2.1
2021-01-01 0.1000076      NA
2021-01-01 0.1000152      NA
2021-01-01 0.1000227      NA
2021-01-01 0.1000303      3
2021-01-01 0.1000379      NA
2021-01-01 0.1000455      NA
2021-01-01 0.1000530      NA
2021-01-01 0.1000606      10
2021-01-01 0.1000682      NA
2021-01-01 0.1000530      NA
2021-01-02 0.1000606      NA
2021-01-02 0.1000682      3
2021-01-02 0.1000682      NA")


mydat %>% 
  group_by(timestamp) %>% 
  fill(H_Tower, .direction = "downup")

#> # A tibble: 14 × 3
#> # Groups:   timestamp [2]
#>    timestamp  H_crops H_Tower
#>    <date>       <dbl>   <dbl>
#>  1 2021-01-01   0.1       2.1
#>  2 2021-01-01   0.100     2.1
#>  3 2021-01-01   0.100     2.1
#>  4 2021-01-01   0.100     2.1
#>  5 2021-01-01   0.100     3  
#>  6 2021-01-01   0.100     3  
#>  7 2021-01-01   0.100     3  
#>  8 2021-01-01   0.100     3  
#>  9 2021-01-01   0.100    10  
#> 10 2021-01-01   0.100    10  
#> 11 2021-01-01   0.100    10  
#> 12 2021-01-02   0.100     3  
#> 13 2021-01-02   0.100     3  
#> 14 2021-01-02   0.100     3

reprex package (v2.0.1) 于 2021 年 10 月 22 日创建

【讨论】:

    【解决方案2】:

    我正在努力做你所做的!但我是 R 的初学者,我在我的数据框中应用了你的解决方案但没有成功......

    结果是:

    data_glob3 %>%
    +   group_by(timestamp) %>% 
    +   fill(H_Tower, .direction = "downup")
    # A tibble: 12,721 x 3
    # Groups:   timestamp [12,721]
       timestamp           H_crops H_Tower
       <dttm>                <dbl>   <dbl>
     1 2021-01-01 00:00:00   0.1       2.1
     2 2021-01-01 00:30:00   0.100    NA  
     3 2021-01-01 01:00:00   0.100    NA  
     4 2021-01-01 01:30:00   0.100    NA  
     5 2021-01-01 02:00:00   0.100    NA  
     6 2021-01-01 02:30:00   0.100    NA  
     7 2021-01-01 03:00:00   0.100    NA  
     8 2021-01-01 03:30:00   0.100    NA  
     9 2021-01-01 04:00:00   0.100    NA  
    10 2021-01-01 04:30:00   0.100    NA  
    # ... with 12,711 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多