0

一緒に貼り付けたい文字ベクトルがいくつかあります。問題は、一部の文字ベクトルがかなりまばらであることです。そのため、それらを貼り付けると、NA と追加のセパレーターが表示されます。ベクトルを結合しながら、NA と余分なセパレーターを効率的に削除するにはどうすればよいですか?

私は次のようなものを持っています:

n1 = c("goats", "goats", "spatula", NA, "rectitude", "boink")
n2 = c("forever", NA, "...yes", NA, NA, NA)
cbind(paste(n1,n2, sep=", "))

それは私に与える:

[1,] "goats, forever" 
[2,] "goats, NA"      
[3,] "spatula, ...yes"
[4,] "NA, NA"         
[5,] "rectitude, NA"  
[6,] "boink, NA" 

でも私はしたい:

[1,] "goats, forever" 
[2,] "goats"          
[3,] "spatula, ...yes"
[4,] <NA>
[5,] "rectitude"      
[6,] "boink"

多くの正規表現と文字列分割を使用してこれを行うには、明らかに非効率的で退屈な方法があります。しかし、迅速/簡単なことはありますか?

4

3 に答える 3

5

正規表現はそれほど多くありません。置き換えるのは 1 行とあと 1 行だけですNA

n1 <- c("goats", "goats", "spatula", NA, "rectitude", "boink")
n2 <- c("forever", NA, "...yes", NA, NA, NA)
n3 <- cbind(paste(n1,n2, sep=", "))
n3 <- gsub("(, )?NA", "", n3)
n3[n3==""] <- NA
于 2013-08-13T09:28:19.600 に答える
1

qdap パッケージを使用するオプションを次に示します (ただし、ベース R を使用するため、他のオプションの方が適しているように思えます)。

library(qdap)
gsub(" ", ", ", blank2NA(Trim(gsub("NA", "", paste(n1, n2)))))

## [1] "goats, forever"  "goats"           "spatula, ...yes" NA               
## [5] "rectitude"       "boink"

または...

## gsub(" ", ", ", blank2NA(gsub("NA| NA", "", paste(n1, n2))))
于 2013-08-13T13:15:01.860 に答える