У меня есть фрейм данных, где все переменные имеют символьный тип. Многие из столбцов полностью пусты, то есть есть только заголовки переменных, но нет значений. Есть ли способ выложить пустые столбцы?
R: удалить несколько пустых столбцов символьных переменных
Ответ 1
Если ваши пустые столбцы - действительно пустые столбцы символов, то должно работать следующее: Его нужно будет изменить, если ваши "пустые" столбцы символов включают, скажем, пробелы.
Пример данных:
mydf <- data.frame(
  A = c("a", "b"),
  B = c("y", ""),
  C = c("", ""),
  D = c("", ""),
  E = c("", "z")
)
mydf
#   A B C D E
# 1 a y      
# 2 b       z
Идентификация и удаление "пустых" столбцов.
mydf[!sapply(mydf, function(x) all(x == ""))]
#   A B E
# 1 a y  
# 2 b   z
В качестве альтернативы, как рекомендовано @Roland:
> mydf[, colSums(mydf != "") != 0]
  A B E
1 a y  
2 b   z
		Ответ 2
Вы можете выполнить одно из следующих действий:
emptycols <- sapply(df, function (k) all(is.na(k)))
df <- df[!emptycols]
или
emptycols <- colSums(is.na(df)) == nrow(df)
df <- df[!emptycols]
Если пустым вы имеете в виду, что они "", второй подход можно адаптировать так:
emptycols <- colSums(df == "") == nrow(df)
		Ответ 3
У меня похожая ситуация: я работаю с большой базой данных общедоступных записей, но когда я уменьшаю ее до нужного диапазона дат и категории, которые мне нужны, есть тонна столбцов, которые не используются. Некоторые из них пусты, а некоторые - NA.
Выбранный ответ: fooobar.com/questions/2046958/... не работал у меня, но это произошло:
df[!sapply(df, function (x) all(is.na(x) | x == ""))]
		Ответ 4
Если вы говорите о столбцах, где все значения NA, используйте remove_empty("cols") из пакета janitor.
Если у вас есть символьные векторы, где каждое значение является пустой строкой "", вы можете сначала преобразовать эти значения в NA по всему вашему data.frame с помощью na_if из пакета dplyr:
dat <- data.frame(
  x = c("a", "b", "c"),
  y = c("", "", ""),
  z = c(NA, NA, NA),
  stringsAsFactors = FALSE
)
dat
#>   x y  z
#> 1 a   NA
#> 2 b   NA
#> 3 c   NA
library(dplyr)
library(janitor)
dat %>%
  mutate_all(funs(na_if(., ""))) %>%
  remove_empty("cols")
#>   x
#> 1 a
#> 2 b
#> 3 c
		Ответ 5
Это зависит от того, что вы подразумеваете под пустым: это NA или "", или это может быть даже " "? Возможно, что-то подобное:
df[,!apply(df, 2, function(x) all(gsub(" ", "", x)=="", na.rm=TRUE))]
		Ответ 6
Вот что можно изменить, чтобы исключить столбцы, содержащие любые указанные переменные.
newdf= df[, apply(df, 2, function(x) !any({is.na(x) | x== "" | 
x== "-4"} ) )] 
		Ответ 7
Если вы знаете индексы столбца, вы можете использовать
df[,-c(3, 5, 7)]
Это приведет к опущению столбцов 3, 5, 7.
Ответ 8
Это также может быть сделано dplyr и select_if
'select_if(df,function(x){any(!is.na(x))})'
или с помощью is.null() или x=="" в зависимости от того, как в ваших данных определены пустые значения.