![](/img/trans.png)
[英]R: How do I replace NAs in a dataframe column with values from conditions leveraging other multiple columns?
[英]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.