私は負の数と正の数の両方からなる数値ベクトルRを使います。私は2つの別々のリストに、記号(今のゼロを無視して)に基づいて、リスト内の数字を分けたい:R:ベクトルから条件を満たす項目を選択する
- 新しいベクトルのみを含む負の数
- 別のベクトルを含む唯一の正の数
ドキュメントでは、データフレーム内の行/列/セルを選択する方法を示していますが、これはAFAICTベクタでは機能しません。
どのように(ループなしで)行うことができますか?
私は負の数と正の数の両方からなる数値ベクトルRを使います。私は2つの別々のリストに、記号(今のゼロを無視して)に基づいて、リスト内の数字を分けたい:R:ベクトルから条件を満たす項目を選択する
ドキュメントでは、データフレーム内の行/列/セルを選択する方法を示していますが、これはAFAICTベクタでは機能しません。
どのように(ループなしで)行うことができますか?
それは(NaNのためのチェックを追加しました)非常に簡単に行われます。
d <- c(1, -1, 3, -2, 0, NaN)
positives <- d[d>0 & !is.nan(d)]
negatives <- d[d<0 & !is.nan(d)]
あなたはNAとNaNで、is.na(両方を除外したい場合)の両方にtrueを返します:
d <- c(1, -1, 3, -2, 0, NaN, NA)
positives <- d[d>0 & !is.na(d)]
negatives <- d[d<0 & !is.na(d)]
選択からNaNを無視するにはどうすればよいですか? –
私は答えを編集しました。 d> 0はモード論理のベクトルであり、is.nan(d)とis.na(d)と同じです。論理の2つのベクトルに&を適用することは "論理的"なことを行います。 –
ありがとう、あなたはスターです! –
それは、 "角括弧"を使用して行うことができます。 0より大きい値を含む新しいベクトルが作成されます。比較演算子が使用されるので、ブール値で表されます。したがって、角括弧は正確な数値を得るために使用されます。
d_vector<-(1,2,3,-1,-2,-3)
new_vector<-d_vector>0
pos_vector<-d_vector[new_vector]
new1_vector<-d_vector<0
neg_vector<-d_vector[new1_vector]
purrr
パッケージには、フィルタリングするベクターのためのいくつかの便利な機能が含まれています。
library(purrr)
test_vector <- c(-5, 7, 0, 5, -8, 12, 1, 2, 3, -1, -2, -3, NA, Inf, -Inf, NaN)
positive_vector <- keep(test_vector, function(x) x > 0)
positive_vector
# [1] 7 5 12 1 2 3 Inf
negative_vector <- keep(test_vector, function(x) x < 0)
negative_vector
# [1] -5 -8 -1 -2 -3 -Inf
あなたはまた、discard
機能
が判明を使用することができ、私は単純に、選択基準のベクトルの名前を使用することができます。例:negs < - temp [temp <0] –