У меня есть data.frame - например: data1.csv - (100 000 строк x 5 столбцов).
N - ID - ДАТА - ТЕКСТ - ЯЗЫК
Далее я сделал выборку из 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 с TEXT и CODE. Соблюдать порядок — это важно.
Обратите внимание, что язык текста — испанский. Включены разные акценты. Когда я читаю оба файла, я использую fread
function. Для данных1 я использую UTF-8 encoding
и Latin-1
для данных2. Если я читаю 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
, чтобы определить номер строки data1. Этот метод не работает. Он идентифицирует 2400 из 3000, и порядок неправильный. Я думаю, это потому, что оставшиеся 600 чередуются.
dput(x[1:5,1:5])
) или создать поддельные данные (data.frame(...)
), чтобы мы могли видеть, как работает ваш код. Кстати: сравнение цепочек (data2[i,2]==data1[j,4]==T
) работает в python (geeksforgeeks.org/chaining-comparison- операторы-python), но не в R; кроме того, любое условиеcond == T
может опустить==T
и просто сделатьcond
. - person r2evans   schedule 28.06.2019