私は2つのデータフレームを持っています。別のデータフレームの対応する行に特定の値を持つデータフレーム内の行を削除
私の実際のデータを保持しています、データと呼ぶことができます。 2番目はインジケータ行列として機能し、少なくとも1または2を含む値の行の出現をチェックするif-else文を使用して作成されます。の表示とすることができます。ここで
は一例です:見てからremove<-function(x){
if (((x[1] == "1") | (x[1] == "2")) | ((x[2] == "1") | (x[2] == "2"))
| ((x[3] == "1") | (x[3] == "2")) | ((x[4] == "1") | (x[4] == "2"))){
return(0)
}
else{
return(1)
}
}
indic<-data.frame(apply(data,1,remove))
> indic
y
1 0
2 1
3 0
4 1
5 0
:データの
col1<-c(1,3,1,3,2)
col2<-c(3,4,2,3,"")
col3<-c(1,3,"","","")
col4<-c(2,"","","","")
data<-data.frame(cbind(col1,col2,col3,col4))
> data
col1 col2 col3 col4
1 3 1 2
3 4 3
1 2
3 3
2
行がが含まれている必要があり、少なくとも1または2ので、ここで私の関数でありますデータであり、行2および行4は、少なくとも1または2を含まず、標識によって確認される。
Iはインドの行2及び4に対応データ、の行2及び4を除去したいです。私はすでに次のことを試してみました:
finalMatrix<-class(array)
for(i in 1:nrow(indic)){
if (indic[i,1] == "1"){
finalMatrix = data[-i,]
}
else{
data[i,] = data[i,]
}
}
しかし、私の出力は、このようなものです:
> finalMatrix
col1 col2 col3 col4
1 3 1 2
3 4 3
1 2
2
効果的ONLY 4行目を排除します。私は、各反復後に新しいデータフレームを作成しなければならないという事実と関連があるかもしれないと思うが、問題は反復の長さが変わることである。
私のコードで正しい軌道に乗っているかどうかわかりません...どのような提案も素敵でしょう。私はこれをしばらく思ってきました。
-Soph
私はその質問を理解していません。 'finalMatrix < - data [indic!=" 1 "、]'のようなものが欲しいですか? – Vandenman
'finalMatrix < - data [which(indic == 0)、]'この場合にも可能です。 –
'data [rowSums(data ==" 1 "| data ==" 2 ")> ] '?あなたは正しくベクトル化を使用しておらず、 'for'ループは非常に効率が悪いです。また、あなたの価値を「性格」に強要する理由はないようです。欠損値には「NA」を使用します。 – nicola