280

次のような「mydata」という名前のデータフレームがあります。

   A  B  C   D 
1. 5  4  4   4 
2. 5  4  4   4 
3. 5  4  4   4 
4. 5  4  4   4 
5. 5  4  4   4 
6. 5  4  4   4 
7. 5  4  4   4 

行 2,4,6 を削除したいと思います。たとえば、次のようにします。

   A  B  C   D
1. 5  4  4  4 
3. 5  4  4  4 
5. 5  4  4  4 
7. 5  4  4  4 
4

8 に答える 8

418

重要なアイデアは、削除する行のセットを形成し、そのセットの補数を保持することです。

R では、集合の補数は「-」演算子によって与えられます。

したがって、data.frameが呼び出されたと仮定すると、次のようになりmyDataます。

myData[-c(2, 4, 6), ]   # notice the -

もちろん、myDataこれらの行を完全に削除したい場合は、「再割り当て」することを忘れないでください。そうしないと、R は結果を出力するだけです。

myData <- myData[-c(2, 4, 6), ]
于 2012-09-08T04:39:37.100 に答える
99

いわゆるブールベクトル、別名を使用することもできますlogical

row_to_keep = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE)
myData = myData[row_to_keep,]

!演算子は NOT として機能することに注意してください。つまり、次のようになり!TRUE == FALSEます。

myData = myData[!row_to_keep,]

これは、@mrwab の回答 (+1 btw :)) と比較すると少し面倒ですが、列の値が特定の値を超える場合など、その場で論理ベクトルを生成できます。

myData = myData[myData$A > 4,]
myData = myData[!myData$A > 4,] # equal to myData[myData$A <= 4,]

ブール値ベクトルをインデックスのベクトルに変換できます。

row_to_keep = which(myData$A > 4)

最後に、非常に巧妙なトリックは、この種のサブセット化を抽出だけでなく代入にも使用できることです。

myData$A[myData$A > 4,] <- NA

Aが割り当てられている場所NA(数字ではない) A4 を超える場所。

于 2012-09-08T10:57:18.140 に答える
12

単純化されたシーケンスで:

mydata[-(1:3 * 2), ]

シーケンス別:

mydata[seq(1, nrow(mydata), by = 2) , ]

負の数列 :

mydata[-seq(2, nrow(mydata), by = 2) , ]

または、奇数を選択してサブセット化したい場合:

mydata[which(1:nrow(mydata) %% 2 == 1) , ]

または、奇数を選択してサブセット化する場合は、バージョン 2:

mydata[which(1:nrow(mydata) %% 2 != 0) , ]

または、偶数を除外してサブセット化する場合:

mydata[!which(1:nrow(mydata) %% 2 == 0) , ]

または、偶数を除外してサブセット化する場合は、バージョン 2:

mydata[!which(1:nrow(mydata) %% 2 != 1) , ]
于 2018-09-06T08:31:51.497 に答える
0

これは、インデックスで行を削除するための簡単で汚い関数です。

removeRowByIndex <- function(x, row_index) {
  nr <- nrow(x)
  if (nr < row_index) {
    print('row_index exceeds number of rows')
  } else if (row_index == 1)
  {
    return(x[2:nr, ])
  } else if (row_index == nr) {
    return(x[1:(nr - 1), ])
  } else {
    return (x[c(1:(row_index - 1), (row_index + 1):nr), ])
  }
}

主な欠点は、row_index 引数が値のベクトルであるという R パターンに従っていないことです。R を書き始めてテストするのに数分しかかからず、ここ数週間で R を使い始めたばかりなので、他にも問題があるかもしれません。これに関するコメントや改善は大歓迎です!

于 2019-02-24T08:46:37.703 に答える