2

721 x 26 のデータフレームがあります。一部の行には空白のエントリがあります。NULL や NA ではなく、次のように空です。この種のエントリを持つ行を削除するにはどうすればよいですか?

1         Y    N        Y          N            86.8
2         N    N        Y          N            50.0
3                                               76.8
4         N    N        Y          N            46.6
5         Y    Y        Y          Y            30.0
4

1 に答える 1

6

この質問に対する答えは、「空白」に見える文字列に含まれる可能性のある種類のものについて、どの程度妄想的になりたいかによって異なります。これは、長さゼロの空白文字列""と、1 つ以上の[[:space:]]文字 (つまり、「タブ、改行、垂直タブ、フォーム フィード、キャリッジ リターン、スペース、および場合によってはその他のロケール依存文字」) で構成される任意の文字列に一致する、かなり慎重なアプローチです。 、?regexヘルプページによると)。

## An example data.frame containing all sorts of 'blank' strings
df <- data.frame(A = c("a", "", "\n", " ", " \t\t", "b"),
                 B = c("b", "b", "\t", " ", "\t\t\t", "d"),
                 C = 1:6)

## Test each element to see if is either zero-length or contains just
## space characters
pat <- "^[[:space:]]*$"
subdf <- df[-which(names(df) %in% "C")] # removes columns not involved in the test
matches <- data.frame(lapply(subdf, function(x) grepl(pat, x))) 

## Subset df to remove rows fully composed of elements matching `pat` 
df[!apply(matches, 1, all),]
#   A B C
# 1 a b 1
# 2   b 2
# 6 b d 6

## OR, to remove rows with *any* blank entries
df[!apply(matches, 1, any),]
#   A B C
# 1 a b 1
# 6 b d 6
于 2012-07-16T23:06:39.617 に答える