我有一个data.frame-例如:data1.csv-(100 000行x 5列)。
N-ID-DATE-TEXT-LANG
接下来,我在没有set.seed
的情况下进行了3000次采样:
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(数据2),以便将它们与我最初不需要的所有原始变量相关联。我需要将ID与TEXT和CODE关联。保持顺序至关重要。
请注意,文本语言是西班牙语。包括不同的口音。读取两个文件时,我都使用fread
功能。对于data1,我将UTF-8 encoding
和Latin-1
用于data2。如果我用UTF-8 encoding
读取data2,则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的行号。此方法无效。它标识3000中的2400,并且顺序不正确。我认为这是因为剩下的600个被交错了。
答案 0 :(得分:1)
我认为您正在寻找的是加入。试试这个:
library(dplyr)
data2 %>%
left_join(data1 %>% select(-N), by = "TEXT")
但是,通过包含已使用不同编码处理和读取的特殊字符的文本字段的联接可能会导致问题。如果可能的话,我建议您在与其他程序一起处理这些样本数据时保留唯一的ID,并改为通过此列加入。