[英]How to identify duplicated data in a data.frame in R?
我有一個data.frame-例如:data1.csv-(100 000行x 5列)。
N-ID-DATE-TEXT-LANG
接下來,我進行了3000次不帶set.seed
:
num <- c(1:100000)
aleat <- sort(sample(num, 3000, replace = F))
data2 <- data1[aleat,c(1,4)]
請注意,col。 4是TEXT。
data2.csv已被其他程序處理,並將變量添加到文件中。
現在,data2是一個data.frame(3000行x 3列)
N-文本-代碼
data2$N = c(1:3000)
所以data1$N
與data2$N
不同
現在,我需要在data1中標識那些3000 TEXT(data2),以便將它們與我最初不需要的所有原始變量相關聯。 我需要將ID與TEXT和CODE關聯。 保持秩序至關重要。
請注意,文本語言是西班牙語。 包括不同的口音。 當我讀取兩個文件時,我都使用fread
函數。 對於data1,我對數據2使用UTF-8 encoding
和Latin-1
。 如果我以UTF-8 encoding
讀取data2,R將無法正確讀取。 我想這是因為另一個程序已經處理並保存了它。
我嘗試了兩種方法:
1)for循環:
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的行號。 此方法無效。 它標識3000中的2400,並且順序不正確。 我認為這是因為剩下的600個被交錯了。
我認為您正在尋找的是加入。 嘗試這個:
library(dplyr)
data2 %>%
left_join(data1 %>% select(-N), by = "TEXT")
但是,通過包含已使用不同編碼處理和讀取的特殊字符的文本字段進行聯接可能會導致問題。 如果可能的話,我建議您在與其他程序一起處理這些樣本數據時保留唯一的ID,並改為通過此列加入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.