-1

次の問題があり、R でどこから始めればよいかわかりません。同じ情報を持つ 2 つの列がありますが、1 つの列には追加情報が含まれています。両方の列をまったく同じにしたい。次に例を示します。

1   1
1   1
2   1
2   2
3   2
3   2
4   2
4   3
5   3
5   3
    4
    4
    4
    5
    5
    5
    5
    5

したがって、2 番目の列のいくつかの数値を削除して、両方の列の長さが同じになり、各行の数値が同じになるようにする必要があります。ループを構築し、R に 2 列目の数値を まで削除するように指示する可能性があると思いますcolumn1 = column2。しかし、どこから始めればよいかわかりません。2 つの行が一致しない場合、R が 2 つの列を自動的に読み取り、削除する可能性さえありますか?

4

2 に答える 2

3

質問を額面どおりに受け取ると、列 1 == 列 2 の行と NA の行も削除された行のみが返されます。これが出力として期待するものではない場合は、再現可能な例を使用して、質問をさらに明確にしてください。

> dat <- read.table(text = "1   1
+ 1   1
+ 2   1
+ 2   2
+ 3   2
+ 3   2
+ 4   2
+ 4   3
+ 5   3
+ 5   3
+ NA    4
+ NA    4
+ NA    4
+ NA    5
+ NA    5
+ NA    5
+ NA    5
+ NA    5", header = FALSE)


> dat[dat$V1 == dat$V2 & complete.cases(dat),]
  V1 V2
1  1  1
2  1  1
4  2  2
于 2012-05-24T14:31:33.607 に答える
0

まず、問題を説明するいくつかの R オブジェクトを作成しましょう。

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5)

質問から、同じオブジェクトにそれらがあるように聞こえます:

c <- cbind(a,b)
  Warning message:
In cbind(a, b) :
  number of rows of result is not a multiple of vector length (arg 1)

しかし、これは実際には の最初のlength(b) - length(a)要素をa末尾に追加するので、 と同じ長さになりbます。

最初の欠損値を埋めることができますa

 a2 <- append(a, rep(NA, 6) 

これで、それらを一緒にバインドできます:

 c <- cbind(a2, b)

しかし今では、a に一致しない要素を b から削除したいようです。for ループを提案します。しかし、それは面倒になり、目の前のタスクが不十分に定義されていることをすぐに示します。whileより適切かもしれませんが、@ user1407656 のコメントで述べたように、2 つの列を結合するだけで目的の結果が得られることがすぐに明らかになりますa

 d <- cbind(a,a)
于 2012-05-24T14:33:20.533 に答える