2017-02-06 2 views
1

例:次の構造を持つ2つのベクトルがあります(データフレームの2つの列になることもできます)。 Iは、AのオブジェクトであればBのオブジェクトの最初の要素に等しい場合、 が提示例えばB.
のオブジェクトとAのオブジェクトを置き換えること形状の二つのベクトルを比較する必要Rで同じ長さの2つのベクトルをどのように比較するのですか?オブジェクトではないオブジェクト

A <- c("a", "d", "f", "a", "n", "d", "d") 

B <- c("h xx", "a xxx", "f xxxx", "d xxxxx", "a xxx", "h xx", "f xxxx") 

オブジェクトA[1]aの場合、B[2]a xxxと一致するため、オブジェクトA [1]がオブジェクトB[2]に置き換えられます。 "a xxx" "d xxxxx" "f xxxx" "a xxx" "n" "d xxxxx" "d xxxxx"

答えて

1

ロジック::私たちはAのそれぞれを繰り返し処理し、その後、我々はBからインデックスを取得greplを使用して 最後にAは、以下の要素となります。

sapply(A, function(x) {if(any(grepl(x, B))) x <- B[grepl(x, B)][1];x}) 
#  a   d   f   a   n   d   d 
# "a xxx" "d xxxxx" "f xxxx" "a xxx"  "n" "d xxxxx" "d xxxxx" 
1

こんにちは、あなたが探しているものは以下です:

for(i in 1:length(A)){ 
    for(j in 1:length(B)){ 
    if(A[i] == substr(B[j], 1, 1)){ 
     A[i] <- B[j] 
    } 
    } 
} 

# [1] "a xxx" "d xxxxx" "f xxxx" "a xxx" "n"  "d xxxxx" "d xxxxx" 
3

あなたはこのよう%in%matchを使用することができます。%in%を交換するためにAの位置を選択し、ここで

A[A %in% substr(B, 1, 1)] <- B[match(A, substr(B, 1, 1), nomatch=FALSE)] 
A 
[1] "a xxx" "d xxxxx" "f xxxx" "a xxx" "n"  "d xxxxx" "d xxxxx" 

matchは、正しい置換順序を見つけます。 nomatch=FALSEは、BにないAの要素が、デフォルトであるNAを返すのではなく無視されるように使用されます。 substrは、マッチングのためにBの最初の文字を引き出すために使用されます。

+1

常にあなたは常に簡潔なものを提供しています! +1! –

関連する問題