簡體   English   中英

如何根據另一列中因子變量的變化創建列?

[英]How do I create a column based on a change in factor varible in another column?

我有以下數據框,其中包含每個縣隨時間變化的支出水平信息,以及該縣的居家要求。 居家要求從 0 到 2,其中 2 表示更嚴格的鎖定:

# A tibble: 47,898 x 4
   countyfips date     C6_Stay_at_home_requirements spend_all
        <dbl> <chr>                           <dbl>     <dbl>
 1       1001 20200112                            0  -0.0831 
 2       1001 20200119                            0   0.0038 
 3       1001 20200126                            0   0.0917 
 4       1001 20200202                            0  -0.00724
 5       1001 20200209                            0   0.00567
 6       1001 20200216                            0   0.125  
 7       1001 20200223                            0  -0.0929 
 8       1001 20200301                            0  -0.0455 
 9       1001 20200308                            0   0.108  
10       1001 20200315                            0   0.212  
# … with 47,888 more rows

我想創建一個名為 WeekAfterReopening1to0 的新列,當政策從 1 放寬到 0 時,該列將為 0。然后該列的值每周增加 1。 不過,在重新開放之前,我想要負數。 例如,如果縣沒有從 2 更改為 0,則所有值都為 NA。

然后,如果變量從 2 變為 0,如果它從 2 變為 1,我想做類似的事情,只是列名不同(WeekAfterReopening2to0 和 WeekAfterReopening2to1)。

最終結果可能如下所示:

# A tibble: 47,898 x 6
   countyfips date     C6_Stay_at_home_requirements WeekAfterReopening2to1 WeekAfterReopening1to0 WeekAfterReopening2to0
        <dbl> <chr>                           <dbl>     <dbl>   <dbl>                <dbl>
 1       1001 20200112                            0    -3        -5                 NA
 2       1001 20200119                            2    -2        -4                 NA
 3       1001 20200126                            2    -1        -3                 NA                        
 4       1001 20200202                            1     0        -2                 NA
 5       1001 20200209                            1     1        -1                 NA
 6       1001 20200216                            0     2        0                  NA
 7       1001 20200223                            0     3        1                  NA
 8       1001 20200301                            0     4        2                  NA
 9       1001 20200308                            0     5        3                  NA
10       1001 20200315                            0     6        4                  NA
# … with 47,888 more rows

我正在考慮使用 dplyr 函數 mutate 和排列,但我不知道如何將這些函數組合在一起,因為我認為這超出了我的 r 能力。

任何幫助表示贊賞,謝謝。

使用dplyr ,這可以通過以下方式完成:

df %>% 
  arrange(date) %>% 
  mutate(Reopening1to0 = (C6_Stay_at_home_requirements == 0) & (lag(C6_Stay_at_home_requirements, default = -1) == 1),
         WeekAfterReopening1to0 = row_number() - which.max(Reopening1to0))

首先,對於每一行,我們檢查C6_Stay_at_home_requirements列的值是否為 0,其前驅的值是否為 1。然后,我們從新創建的列上具有TRUE值的行號中減去當前行號,從而找到有多少行遠離當前行。
這可以合並為一行,但我認為這樣更清楚。

這使

   countyfips     date C6_Stay_at_home_requirements spend_all Reopening1to0 WeekAfterReopening1to0
1        1001 20200112                            0  -0.08310         FALSE                     -5
2        1001 20200119                            2   0.00380         FALSE                     -4
3        1001 20200126                            2   0.09170         FALSE                     -3
4        1001 20200202                            1  -0.00724         FALSE                     -2
5        1001 20200209                            1   0.00567         FALSE                     -1
6        1001 20200216                            0   0.12500          TRUE                      0
7        1001 20200223                            0  -0.09290         FALSE                      1
8        1001 20200301                            0  -0.04550         FALSE                      2
9        1001 20200308                            0   0.10800         FALSE                      3
10       1001 20200315                            0   0.21200         FALSE                      4

輸入數據:

df <- read.table(text = "countyfips date     C6_Stay_at_home_requirements spend_all
1       1001 20200112                            0  -0.0831 
2       1001 20200119                            2   0.0038 
3       1001 20200126                            2   0.0917 
4       1001 20200202                            1  -0.00724
5       1001 20200209                            1   0.00567
6       1001 20200216                            0   0.125  
7       1001 20200223                            0  -0.0929 
8       1001 20200301                            0  -0.0455 
9       1001 20200308                            0   0.108  
10       1001 20200315                            0   0.212")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM