2016-01-21 2 views
-1

Учитывая кадр данныхматч строк через два столбца

df=data.frame(
       E=c(1,1,2,1,3,2,2), 
       N=c(4,4,10,4,3,2,2) 
      ) 

Я хотел бы создать третий столбец: Каждый раз, когда значение равно другое значение в том же столбце и эти строки, также равны в другом столбце она приводит к совпадению (новый символ для каждого матча).

dfx=data.frame(
       E=c(1,1,2,1,3,2,2,3, 2), 
       N=c(4,4,10,4,3,2,2,6, 10), 
       matched=c("A", "A", "B","A", NA, "C", "C", NA, "B") 
       ) 

Спасибо!

+2

Каковы правила для согласования? Почему 1 и 4 приводят к A? –

+0

Извините, я должен был уточнить. Каждый раз, когда значение равно другому значению в одном столбце, и эти строки также равны в другом столбце, он приводит к совпадению (новый символ для каждого совпадения). – 9987

ответ

1

Здесь df является:

df <- structure(list(E = c(1, 1, 2, 1, 3, 2, 2, 3, 2), N = c(4, 4, 
     10, 4, 3, 2, 2, 6, 10)), .Names = c("E", "N"), row.names = c(NA, 
     -9L), class = "data.frame") 

Вы можете сделать:

dfx <- transform(df, matched = { 
    i <- as.character(interaction(df[c("E", "N")])) 
    tab <- table(i)[order(unique(i))] 
    LETTERS[match(i, names(tab)[tab > 1])] 
}) 

# E N matched 
# 1 1 4  A 
# 2 1 4  A 
# 3 2 10  B 
# 4 1 4  A 
# 5 3 3 <NA> 
# 6 2 2  C 
# 7 2 2  C 
# 8 3 6 <NA> 
# 9 2 10  B 
Смежные вопросы