Как подключиться к нескольким последовательным пропущенным значениям данных, используя geom_line? - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблема, аналогичная Q: Соединение между отсутствующими значениями с помощью geom_line, но обнаружил, что предоставленные ответы соединяют линии только при наличии только одного пропущенного значения.Если существует более 2 последовательных пропущенных значений, предлагаемые решения не применяются.

Мне нужно связать несколько наблюдений, сделанных с течением времени для отдельных деревьев.Иногда измерения были пропущены так, что в моем df отсутствуют значения, а иногда отдельное дерево было пропущено более одного года подряд, так что существует несколько последовательных NA.

Когда существует только один последовательный NAИспользование geom_line с этой спецификацией позволяет обрабатывать пропущенные значения:

geom_line(data = df[!is.na(df$y),])

Когда существует более одного последовательного NA (т.е. пропущено 2 измерения), geom_line не будет рисовать пропущенные данные.Применение! Is.na ко всему df не решает проблему, равно как и использование geom_path.

Вот код для генерации df, который повторяет проблему:

x <- c(1,2,3,4,5,6,7,8,9)
tr1 <- c(20,25,18,16,22,12,NA,15,45)
tr2 <- c(12,NA,NA,NA,30,48,30,NA,NA)
df <- data.frame(x, tr1,tr2)

Следующий кодможет использоваться для построения графика a) tree1 с отсутствующим NA, b) tree1 с мостовым NA, b) tree2 с исправлением geom_line в коде, но с отсутствующей ожидаемой линией между NA

tree1 <- ggplot(df, aes(x, tr1)) + geom_point() +
  geom_line()
tree1.fix <- ggplot(df, aes(x, tr1)) + geom_point() + 
  geom_line(data = df[!is.na(df$tr1),])
nofix <- ggplot(df, aes(x, tr2)) + geom_point() +
  geom_line(data = df[!is.na(df$tr2),])
grid.arrange(tree1, tree1.fix, nofix, ncol = 3)

Есть идеи?

1 Ответ

0 голосов
/ 25 сентября 2019

geom_line() не подключается к отсутствующим данным (NA).И geom_point() также не отображает отсутствующие данные.Это правильное поведение по умолчанию для отсутствующих данных.Невозможно поместить NA на числовые оси.

То, что вы делаете с df[!is.na(df$tr2),], это удаление отсутствующих данных перед отправкой их на geom_line(), заставляя думать, что ваши данные полны.Чтобы лучше понять это, распечатайте df[!is.na(df$tr2), c("x", "tr2")].Это данные, которые geom_line() получает.Все эти данные отображаются и подключены.В этих данных нет NA, потому что вы их удалили.

В вашем примере "nofix" вы получите строку от x = 1 до x = 5 в течение трех последовательных NA. Поэтому я предполагаю, что вы имеете в виду, чтоgeom_line() не продолжается после x = 7? Но посмотрите на данные. Нет данных после x = 7. У каждого x> 7 есть y = NA. А если вы удалите NA, то после x вообще нет данных.= 7.

Если в вашем примере есть еще одна точка, скажем, x = 10 y = 10, то линия будет продолжаться от x = 7 до x = 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...