4

データフレームの各行について、現在、重複する値をすべてNAに「等しく」設定するために、4に等しいすべての値を選択しようとしています。

私のデータフレームは次のようなものです。

dat <- read.table(text = "

   1  1  1  2  2  4  4  4  
   1  2  1  1  4  4  4  4", 

header=FALSE)

私が入手する必要があるのは:

   1  1  1  2  2  4   NA  NA
   1  2  1  1  4  NA  NA  NA 

重複する行または列を削除する方法についての情報を見つけましたが、ここでどのように進めるかは本当にわかりません。助けてくれてありがとう

4

3 に答える 3

5

applyデータフレームオブジェクトのマルチクラス機能が破壊されるため、避けたい場合があります。これはbyアプローチです:

> do.call(rbind, by(dat, rownames(dat), 
        function(line) {line[ duplicated(unlist(line)) & line==4 ] <- NA; line} ) )
  V1 V2 V3 V4 V5 V6 V7 V8
1  1  1  1  2  2  4 NA NA
2  1  2  1  1  4 NA NA NA
于 2013-01-22T22:35:12.183 に答える
3

whichここでapply役に立ちます。

> dat <- t(apply(dat, 1, function(X) {X[which(X==4)][-1] <- NA ; X})) 
> dat
[1,]  1  1  1  2  2  4 NA NA
[2,]  1  2  1  1  4 NA NA NA

tしかし、ここで転置()関数を使用しなければならない方法はおそらくありますが、誰かが私を助けてくれますか?

于 2013-01-22T22:15:50.907 に答える
3

duplicatedapplyこのように:で使用できます

dat <- t(apply(dat, 1, function(x) {x[duplicated(x) & x == 4] <- NA ; x}))
于 2013-01-22T22:26:53.777 に答える