У меня есть 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 левых чередуются.