Список, содержащий некоторые кадры данных со значениями NaN. Как их убрать? - PullRequest
2 голосов
/ 26 июня 2019

Я хочу сделать один кадр данных из списка кадров данных, который содержит одну строку. Я пытался связать их вместе, чтобы удалить значения NaN, но вы можете связать только если нет значений NaN!

Что я получил:

[[1]]
[1]          NaN 9.840158e+17

[[2]]
[1]          NaN 9.838244e+17

[[3]]
[1] 6.842105e-01 9.837743e+17

[[4]]
[1] 2.527174e+00 9.837643e+17

[[5]]
[1] 1.168269e+00 9.836988e+17

[[6]]
[1]         NaN 9.83663e+17

Что я хочу:

[1]
      impact           id
6.842105e-01 9.837743e+17
2.527174e+00 9.837643e+17
1.168269e+00 9.836988e+17

Что я пробовал:

bind_rows(data, .id = "id")

Error: Argument 1 must have names

для воспроизведения задачи:

list(c(NaN, 984015782521835008), c(NaN, 983824424532144000), 
c(0.684210526315789, 983774270886236032), c(2.52717391304348, 
983764328443796992), c(1.16826923076923, 983698762760704000
), c(NaN, 983662953894435968))

Какие-нибудь советы, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Мы удаляем элемент list, имеющий NaN, а затем rbind элементы

out <- do.call(rbind, lst1[!sapply(lst1, function(x) any(is.nan(x)))])
colnames(out) <- c("impact", "id")
out
#       impact           id
#[1,] 0.6842105 9.837743e+17
#[2,] 2.5271739 9.837643e+17
#[3,] 1.1682692 9.836988e+17

Или другой вариант - rbind элементов, а затем использовать na.omit

na.omit(do.call(rbind, lst1))

Или с Filter

do.call(rbind, Filter(function(x) !any(is.nan(x)), lst1))

Или используя discard (из purrr)

library(purrr)
discard(lst1, ~ any(is.nan(.x))) %>%
        do.call(rbind, .)
0 голосов
/ 26 июня 2019

Если вы хотите удалить NA из кадра данных, вы можете использовать функции

data

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA))

na.omit(DF)

print (DF)
x  y
1  0
2 10

na.exclude(DF)

print(DF)
x  y
1  0
2 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...