104

データ フレームがある場合、すべての行と列に沿ってすべての特定の値を置き換えるにはどうすればよいですか。たとえば、すべての空NAのレコードを (位置を入力せずに)に置き換えたいとします。

df <- data.frame(list(A=c("", "xyz", "jkl"), B=c(12, "", 100)))

    A   B
1      12
2  xyz    
3  jkl 100

期待される結果:

    A   B
1  NA   12
2  xyz  NA  
3  jkl  100
4

5 に答える 5

37

PikkuKatja と glallen がより一般的な解決策を求めたので、まだコメントできません。回答を書きます。次のようにステートメントを組み合わせることができます。

> df[df=="" | df==12] <- NA
> df
     A    B
1  <NA> <NA>
2  xyz  <NA>
3  jkl  100

因数については、zxzak のコードは既に因数を生成しています。

> df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)))
> str(df)
'data.frame':   3 obs. of  2 variables:
 $ A: Factor w/ 3 levels "","jkl","xyz": 1 3 2
 $ B: Factor w/ 3 levels "","100","12": 3 1 2

問題が発生した場合は、要素を一時的に削除することをお勧めします。

df[] <- lapply(df, as.character)
于 2015-12-08T01:12:06.680 に答える
5

data.table を使用してすばやく取得できます。最初に要素なしで df を作成し、

df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)), stringsAsFactors=F)

今、あなたは使用することができます

setDT(df)
for (jj in 1:ncol(df)) set(df, i = which(df[[jj]]==""), j = jj, v = NA)

そして、それをdata.frameに戻すことができます

setDF(df)

data.frame のみを使用して要因を保持したい場合は、より困難です。

levels(df$value)[levels(df$value)==""] <- NA

ここで、value はすべての列の名前です。ループに挿入する必要があります。

于 2016-11-28T19:28:45.493 に答える