Gostaria de identificar e marcar linhas duplicadas com base em 2 colunas. Gostaria de criar um identificador exclusivo para cada duplicata, para que eu saiba não apenas que a linha é uma duplicata, mas com qual linha é uma duplicata. Eu tenho um quadro de dados que se parece com abaixo com alguns pares de itens duplicados (no ajuste e na posição) e outros pares que não são duplicados. Enquanto os pares de itens são duplicados, as informações que eles contêm são únicas (por exemplo, uma linha terá um valor em Valor1 para 1 linha, mas não Valor2 e Valor 3, a segunda linha ou 'duplicada' terá números para Valor2 e Valor3 apenas não Valor1)
dataframe atual
value1 value2 value3 fit sit
[1,] "1" NA NA "it1" "it2"
[2,] NA "3" "2" "it2" "it1"
[3,] "2" "3" "4" "it3" "it4"
[4,] NA NA NA "it4" "it3"
[5,] "5" NA NA "it5" "it6"
[6,] NA NA "2" "it6" "it5"
[7,] NA "4" NA "it7" "it9"
código para gerar exemplo de quadro de dados
value1<-c(1,NA,2,NA,5,NA,NA)
value2<-c(NA,3,3,NA,NA,NA, 4)
value3<-c(NA,2,4,NA,NA,2, NA)
fit<-c("it1","it2","it3","it4", "it5", "it6","it7")
sit<-c("it2","it1","it4","it3", "it6", "it5", "it9")
df.now<-cbind(value1,value2,value3, fit, sit)
o que eu quero é convertê-lo em um dataframe que se parece com isso:
dataframe desejado
val1 val2 val3 it1 it2
[1,] "1" "3" "2" "it1" "it2"
[2,] "2" "3" "4" "it3" "it4"
[3,] "5" NA "2" "it5" "it6"
[4,] NA "4" NA "it7" "it9"
Eu estava pensando em executar as seguintes etapas: 1. crie novas variáveis usando fit e sente-se com o item mais baixo e os itens mais altos para identificar pares duplicados 2. identifique pares de itens duplicados 3. use ifelse para selecionar e preencher informações exclusivas.
Eu sei como executar as etapas 1 e 3, mas estou preso na etapa 2. Acho que o que preciso fazer não é apenas identificar a duplicata TRUE / FALSE, mas talvez ter uma coluna com um identificador exclusivo para cada par de itens como este (existe são 2 linhas extras por causa da minha etapa 1):
value1 value2 value3 fit sit lit hit dup
[1,] "1" NA NA "it1" "it2" "it1" "it2" 1
[2,] NA "3" "2" "it2" "it1" "it1" "it2" 1
[3,] "2" "3" "4" "it3" "it4" "it3" "it4" 2
[4,] NA NA NA "it4" "it3" "it3" "it4" 2
[5,] "5" NA NA "it5" "it6" "it5" "it6" 3
[6,] NA NA "2" "it6" "it5" "it5" "it6" 3
[7,] NA "4" NA "it7" "it9" "it7" "it9" NA
Não sei ao certo como fazer isso.
O que estou pedindo é ajuda na etapa 2 ou talvez haja uma maneira melhor de resolvê-la do que as etapas descritas.
Use
!duplicated()
apóssort
ing.fonte
Usando
melt/dcast
dedata.table
dados
fonte
Outra
data.table
opção:resultado:
fonte
Aqui está minha tentativa de usar data.table. Seus dados são chamados
mydf
. Primeiro, eu classifiqueifit
esit
para cada linha e criei uma nova variávelgroup
,. Então, para cada grupo, classifiquei os valores nas três colunas de valor (ou seja, valor1, valor2 e valor3). Finalmente, extraí a primeira linha para cada grupo.DADOS
fonte
Isso também pode ser feito usando
tidyr
'spivot_longer
comvalues_drop_na = TRUE
combinado compivot_wider
:Dados
fonte