簡體   English   中英

如何根據R中的其他列將NA替換為先前的列值加上一個分組?

[英]How to replace NAs with previous column values plus one by group based on other columns in R?

我目前正在嘗試用以前的值加一替換我的數據框中的 NA 值。 但是,存在一個條件,因為這是一個日歷年中的周數,因此這些值不得超過 52。 以下是以下數據框的示例:

Animal  Age   Week
Dog     13     5
Dog     14     6
Dog     15     7
Dog     16     NA
Dog     17     NA
Cat     12     46
Cat     13     47
Cat     14     48
Cat     15     49
Cat     16     50
Cat     17     NA
Rat     10     49
Rat     11     50
Rat     12     51
Rat     13     NA
Rat     14     NA
Rat     15     NA
Rat     16     NA
Rat     17     NA

我希望輸出的代碼如下:

Animal  Age   Week
Dog     13     5
Dog     14     6
Dog     15     7
Dog     16     8
Dog     17     9
Cat     12     46
Cat     13     47
Cat     14     48
Cat     15     49
Cat     16     50
Cat     17     51
Rat     10     49
Rat     11     50
Rat     12     51
Rat     13     52
Rat     14     1
Rat     15     2
Rat     16     3
Rat     17     4

需要注意的是,每只動物的最終年齡總是 17 歲。我嘗試使用 R 的函數“完成”和“填充”,但我找不到在第 52 周后重置的情況下添加加一的方法。任何幫助將不勝感激。

對於每個組 ( Animal ),我們將第一個Week數添加到行號並獲得余數。 我們最終replace 0 值replace為 52。

library(dplyr)

df %>%
  group_by(Animal) %>%
  mutate(Week = (first(Week) + row_number() - 1) %% 52,
         Week = replace(Week, Week == 0, 52))


#  Animal   Age  Week
#   <fct>  <int> <dbl>
# 1 Dog       13     5
# 2 Dog       14     6
# 3 Dog       15     7
# 4 Dog       16     8
# 5 Dog       17     9
# 6 Cat       12    46
# 7 Cat       13    47
# 8 Cat       14    48
# 9 Cat       15    49
#10 Cat       16    50
#11 Cat       17    51
#12 Rat       10    49
#13 Rat       11    50
#14 Rat       12    51
#15 Rat       13    52
#16 Rat       14     1
#17 Rat       15     2
#18 Rat       16     3
#19 Rat       17     4

同樣,在基數 R 中:

df <- transform(df, Week = ave(Week, Animal, FUN = function(x) 
                     seq_along(x) + x[1] - 1 %% 52))
transform(df, Week = replace(Week, Week == 0, 52))

我們可以使用data.table

library(data.table)
setDT(df)[,  Week := (first(Week) + .N - 1) %% 52, Animal][Week == 0, Week := 52][]

暫無
暫無

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

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