У меня есть фрейм данных с подобной продольной структурой, как data
:перекодирование недостающих данных в продольных кадрах данных с R
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
Я был бы признателен, если кто-то может дать мне подсказку о том, как получить правильное решение.
Вы также можете использовать 'dplyr' i.e.' data%>% group_by (ID)%>% mutate (new.size = size [! Is.na (size)] [1]) ' – akrun