Вы можете получить к нему доступ таким образом
data.items[1].name
или
data["items"][1]["name"]
Оба способа равны.
Один из способов сделать это:
df[, colSums(is.na(df)) != nrow(df)]
Если количество NA в столбце равно количеству строк, оно должно быть полностью NA.
Или аналогично
df[colSums(!is.na(df)) > 0]
Еще одна опция с Filter
Filter(function(x) !all(is.na(x)), df)
ПРИМЕЧАНИЕ: данные из сообщения @Simon O'Hanlon.
Вот решение dplyr:
df %>% select_if(~sum(!is.na(.)) > 0)
Другим вариантом является пакет janitor
:
df <- remove_empty_cols(df)
Интуитивно понятный скрипт: dplyr::select_if(~!all(is.na(.)))
. В нем буквально хранятся только столбцы с отсутствующими элементами. (для удаления столбцов с отсутствием всех элементов).
> df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )
> df %>% glimpse()
Observations: 10
Variables: 3
$ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
$ nas <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ vals <int> NA, 1, 1, NA, 1, 1, 1, 2, 3, NA
> df %>% select_if(~!all(is.na(.)))
id vals
1 1 NA
2 2 1
3 3 1
4 4 NA
5 5 1
6 6 1
7 7 1
8 8 2
9 9 3
10 10 NA
Это похоже на то, что вы хотите удалять ТОЛЬКО столбцы со всеми NA
s, оставляя столбцы с некоторыми строками, которые имеют NA
s. Я бы сделал это (но я уверен, что существует эффективный векторный указатель:
#set seed for reproducibility
set.seed <- 103
df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )
df
# id nas vals
# 1 1 NA NA
# 2 2 NA 2
# 3 3 NA 1
# 4 4 NA 2
# 5 5 NA 2
# 6 6 NA 3
# 7 7 NA 2
# 8 8 NA 3
# 9 9 NA 3
# 10 10 NA 2
#Use this command to remove columns that are entirely NA values, it will elave columns where only some vlaues are NA
df[ , ! apply( df , 2 , function(x) all(is.na(x)) ) ]
# id vals
# 1 1 NA
# 2 2 2
# 3 3 1
# 4 4 2
# 5 5 2
# 6 6 3
# 7 7 2
# 8 8 3
# 9 9 3
# 10 10 2
Если вы обнаружите, что хотите удалить столбцы с любыми значениями NA
, вы можете просто изменить all
выше до any
.