【发布时间】:2026-02-03 02:15:01
【问题描述】:
我有一个 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是文本。
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 相关联。保持秩序至关重要。
请注意,文本语言是西班牙语。包括不同的口音。当我阅读这两个文件时,我使用freadfunction。对于data1,我使用UTF-8 encoding和Latin-1for data2。如果我用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 个是交错的。
【问题讨论】:
-
Juan,由于我们没有您的数据,我们无法测试您的代码。请在您的问题中添加小而有代表性的数据。由于帧相当大,最好只包含每个帧的几列/行 (
dput(x[1:5,1:5])) 或创建假数据 (data.frame(...)) 以便我们可以看到您的代码是如何工作的。顺便说一句:链接比较 (data2[i,2]==data1[j,4]==T) 在 python (geeksforgeeks.org/chaining-comparison-operators-python) 中有效,但在 R 中无效;此外,cond == T的任何条件都可以省略==T而只执行cond。
标签: r dataframe text duplicates identify