У меня есть фрейм данных, как показано ниже. Я хотел бы найти уникальные строки (строки уникальности).Найти уникальность в строках с NA?
Но в этих данных у меня есть «NA» как отсутствующие данные. Таким образом, NA может получить любое значение, как и другие строки. Например: в строке c6 возможно NA получить 0,1 или 2 в столбце a2, или в строке c8 возможно, что NA получает 0 или 1 в столбце a3.
В другой стороны, в строках 1, 2 и 6 все значения, кроме NA являются одинаковыми, так потому, что НС может быть значение «0 или 1», мне нравится, чтобы удалить эту строку и просто держать строке 2
Кроме того, в строке c6 столбцы a1 и a3 (исключают столбцы NA) такие же, как строки c2 и c5, и в NA могут быть одинаковые значения, такие как c2 и c5, поэтому эта строка не уникальна.
данные:
a1 a2 a3 a4
c1 2 1 0 NA
c2 2 1 0 0
c3 2 1 1 0
c4 2 2 0 NA
c5 2 1 0 0
c6 2 NA 0 NA
c7 1 NA 0 NA
c8 2 0 NA NA
Я хотел бы, чтобы этот вывод:
выход:
a1 a2 a3 a4
c2 2 1 0 0
c3 2 1 1 0
c4 2 2 0 NA
c7 1 NA 0 NA
c8 2 0 NA NA
Кроме того, @ решение Сотоса помочь мне больше, но в последней части после удаления NA когда make pattern для строк, его решение рассматривает тот же шаблон (23) для c8 и c6 и удаляет их. Но на самом деле c8 уникален. Также C7 уникален, но игнорирует его.
c1 <- c(2,1,0,NA)
c2<-c(2,1,0,0)
c3<-c(2,1,1,0)
c4<-c(2, 2,0,NA)
c5<-c(2,1,0,0)
c6<-c(2,NA,0,NA)
c7<-c(1,NA,0,NA)
c8 <-c(2,0,NA,NA)
df<-as.data.frame(rbind(c1,c2,c3,c4,c5,c6,c7,c8))
library(stringr)
df <- unique(df)
df$new <- apply(df, 1, function(i) paste(na.omit(i), collapse = ''))
df$new2 <- rowSums(sapply(df$new, function(i) str_detect(i, df$new)))
new_df <- subset(df, df$new2 == 1)
new_df <- new_df[, !names(new_df) %in% c('new', 'new2')]
new_df
@ mariodeng: Большое спасибо за ваше решение. это хорошо работает, но я хотел бы использовать строку c2 вместо c1. Вы можете помочь мне в этом отношении? – tob
Каков критерий того, как решить, какой из них сохранить/удалить? – mariodeng
Я предпочитаю держать строку со значением, когда у меня есть две строки, одна из которых включает NA (например, строки c1 и c2). Это более информативно для моего будущего анализа. Заранее благодарны за Вашу помощь. – tob