У меня есть фрейм данных с такой же продольной структурой, как data
:
data = data.frame (
ID = c("a","a","a","b","b","b","c","c", "c"),
period = c(1,2,3,1,2,3,1,2,3),
size = c(3,3,NA, NA, NA,1, 14,14, 14))
Значения переменной size
фиксированы, так что каждый период имеет одно и то же значение для size
. Тем не менее, некоторые наблюдения имеют пропущенные значения. Моя цель состоит в том, чтобы заменить эти пропущенные значения значением size
, связанным с периодами, в которых пропущенных значений нет (например, 3 для ID
"a" и 1 для ID
"b").
Желаемый фрейм данных должен выглядеть примерно так:
data.1
ID period value
a 1 3
a 2 3
a 3 3
b 1 1
b 2 1
b 3 1
c 1 14
c 2 14
c 3 14
Я пробовал разные комбинации приведенной ниже формулы, но не получил желаемого результата.
library(dplyr)
data.1 = data %>% group_by(ID) %>%
mutate(new.size = ifelse(is.na(size), !is.na(size),
ifelse(!is.na(size), size, 0)))
Это дает следующее:
data.1
Source: local data frame [9 x 4]
Groups: ID [3]
ID period size new.size
(fctr) (dbl) (dbl) (dbl)
1 a 1 3 3
2 a 2 3 3
3 a 3 NA 0
4 b 1 NA 0
5 b 2 NA 0
6 b 3 1 1
7 c 1 14 14
8 c 2 14 14
9 c 3 14 14
Буду признателен, если кто-нибудь подскажет, как найти правильное решение.