Как определить дубликаты данных в data.frame в R? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть data.frame - например, data1.csv - (100 000 строк x 5 столбцов).

N - ID - ДАТА - ТЕКСТ - LANG

Далее я сделал образец 3000 без set.seed:

num <- c(1:100000)
aleat <- sort(sample(num, 3000, replace = F))
data2 <- data1[aleat,c(1,4)]

Обратите внимание, что цв. 4 текст.

data2.csv были обработаны другими программами и добавили переменные в файл.
Теперь data2 - это data.frame (3000 строк x 3 столбца)

N - ТЕКСТ - КОД

data2$N = c(1:3000) То есть data1$N отличается от data2$N

Теперь мне нужно идентифицировать эти 3000 TEXT (data2) в data1, чтобы связать их со всеми исходными переменными, которые мне сначала не нужны. Мне нужно связать ID с ТЕКСТОМ и КОДОМ. Соблюдать порядок необходимо.

Обратите внимание, что языком текста является испанский. Различные акценты включены. Когда я читаю оба файла, я использую функцию fread. Для data1 я использую UTF-8 encoding и Latin-1 для data2. Если я читаю data2 с UTF-8 encoding R не правильно читает. Я полагаю, это потому, что другая программа обработала и сохранила его.

Я пробовал два способа:

1) для петель:

try1 <- matrix(0, nrow=3000, ncol= 5)
for (i in (1:3000)){
  for (j in (1:100000)){
    if ((data2[i,2] == data1[j,4]) == T){
      try1[j,] <- data1[j,]
    }
  }
}

#OR  

gg <- NULL
a <- NULL
for (j in 1:100000) {
  for (i in 1:3000) {
    if((data2[i,2]==data1[j,4]==T))
      a <- data1[j,]
    gg <- c(gg,a)
  }
}

Обе петли не удалось. Когда я их запускаю, ошибок нет, но Try1 или gg остаются пустыми после запуска циклов.

2) duplicated функция.

num <- c(1:103000)
text1 <- as.data.frame(data1[,4]); colnames(text1) <- "TEXT"
text2 <- as.data.frame(data2[,2]); colnames(text2) <- "TEXT"
text <- rbind(text1,text2)
data3 <- as.data.frame(cbind(num,text))
dup <- as.data.frame(data3[duplicated(data3$TEXT),])

Я создаю переменную num, чтобы определить номер строки данных1. Этот метод не работает. Это идентифицирует 2400 из 3000, и заказ не правильный. Я думаю, что это потому, что эти 600 левых чередуются.

1 Ответ

1 голос
/ 28 июня 2019

Я думаю, что вы ищете, это объединение. Попробуйте это:

library(dplyr)
data2 %>%
  left_join(data1 %>% select(-N), by = "TEXT")

Однако соединение с помощью текстового поля, содержащего специальные символы, которые были обработаны и прочитаны с использованием различных кодировок, может привести к проблемам. Если возможно, я бы посоветовал вам сохранить уникальный идентификатор при обработке этих данных примера с другими программами и вместо этого присоединиться к этому столбцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...