我有一个大的数据框,出于某些目的,我需要执行以下操作:
假设我们有这样一个数据框:
输出:
以下代码达到了目标,但速度太慢了。有没有办法改进它?
- 选择此数据框中的一列
- 遍历给定数据框除所选列之外的所有行
- 选择此数据框中除一个选择的列外所有元素相等的行
- 通过组名称是行索引,组值是重复行的索引来分组它们。
假设我们有这样一个数据框:
V1 V2 V3 V4
1 1 2 1 2
2 1 2 2 1
3 1 1 1 2
4 1 1 2 1
5 2 2 1 2
我们希望将以下列表作为输出:
diff.dataframe("V2", conf.new, conf.new)
输出:
$`1`
[1] 1
$`2`
[1] 2
$`3`
[1] 1 3
$`4`
[1] 2 4
$`5`
[1] 5
以下代码达到了目标,但速度太慢了。有没有办法改进它?
diff.dataframe <- function(param, df1, df2){
excl.names <- c(param)
df1.excl <- data.frame(lapply(df1[, !names(df1) %in% excl.names], as.character), stringsAsFactors=FALSE)
df2.excl <- data.frame(lapply(df2[, !names(df2) %in% excl.names], as.character), stringsAsFactors=FALSE)
list.out <- list()
for (i in 1:nrow(df1.excl)){
for (j in 1:nrow(df2.excl)){
if (paste(df1.excl[i,],collapse='') == paste(df2.excl[j,], collapse='')){
if (!as.character(i) %in% unlist(list.out)){
list.out[[as.character(i)]] <- c(list.out[[as.character(i)]], j)
}
}
}
}
return(list.out)
}
dput(df1)
、dput(df2)
的输出,并展示函数的调用。 - Backlin