Я хотел бы определить «частичные» совпадения строк в кадре данных.В частности, я хочу создать новый столбец со значением 1
, если конкретная строка в кадре данных имеет повторяющуюся строку где-то еще в кадре данных на основе соответствия между подмножеством столбцов.Дополнительная сложность заключается в том, что один из столбцов в кадре данных является числовым, и я хочу сопоставить, если абсолютные значения совпадают.Вот пример данных, за которыми следует пример моего желаемого результата.
name<-c("Richard Nixon", "Bill Clinton", "George Bush", "Richard Nixon")
state<-c("California", "Indiana", "Florida", "California")
num<-c("-258", "123", "42", "258")
date<-c("day 2", "day 15", "day 3","day 45")
(df<-as.data.frame(cbind(name,state,num, date)))
name state num date
1 Richard Nixon California -258 day 2
2 Bill Clinton Indiana 123 day 15
3 George Bush Florida 42 day 3
4 Richard Nixon California 258 day 45
Я надеюсь получить следующий кадр данных:
name state num date newcol
1 Richard Nixon California -258 day 2 1
2 Bill Clinton Indiana 123 day 15 0
3 George Bush Florida 42 day 3 0
4 Richard Nixon California 258 day 45 1
Обратите внимание, что строки 1 и 2 совпадаютвдоль столбцов name
и state
, а их абсолютные значения совпадают в столбце num
, в результате чего 1
в добавленном столбце newcol
для обеих этих строк, в то время как остальные строки не имеют такого соответствия и, следовательно,оцениваются в 0
.
Я пробовал следующее, но безрезультатно:
df$num<-as.numeric(df$num)
which(duplicated(df[c('name', 'state',abs('num'))]),)
Error in abs("num") : non-numeric argument to mathematical function
Конечно, это не работает из-за abs()