23

すべての変数が文字型であるデータ フレームがあります。列の多くは完全に空です。つまり、変数ヘッダーだけがあり、値はありません。空の列をサブセット化する方法はありますか?

4

9 に答える 9

28

空の列が本当に空の文字列である場合、次のようなものが機能するはずです。「空の」文字列にスペースが含まれている場合は、変更する必要があります。

サンプルデータ:

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
于 2013-07-16T09:25:54.460 に答える
12

次のいずれかを実行できます。

emptycols <- sapply(df, function (k) all(is.na(k)))
df <- df[!emptycols]

また:

emptycols <- colSums(is.na(df)) == nrow(df)
df <- df[!emptycols]

空の場合、それらが""であることを意味する場合、2 番目のアプローチは次のように適応できます。

emptycols <- colSums(df == "") == nrow(df)
于 2013-07-16T09:26:53.320 に答える
4

""それはあなたが空のことを意味するかによって異なります:それは NA または" "ですか? このようなものがうまくいくかもしれません:

df[,!apply(df, 2, function(x) all(gsub(" ", "", x)=="", na.rm=TRUE))]
于 2013-07-16T09:35:39.973 に答える
2

purrrパッケージを使用した簡単なソリューション:

purrr::discard(my_data_frame, ~all(is.na(.)))

于 2019-12-30T10:51:19.763 に答える
0

列インデックスがわかっている場合は、使用できます

df[,-c(3, 5, 7)]

これにより、列 3、5、7 が省略されます。

于 2013-07-16T09:23:16.573 に答える