4
我有一個很大的數據框。出於某些目的,我需要做到以下幾點:查找數據框中所有列的重複組除外
在這個數據幀- 選擇一列
- 選擇此數據幀是所有行除了一個選定的列以外的所有元素相等
- 通過組名稱是行索引的方式對它們進行分組,並且組值是重複行的索引。
我已經爲此任務寫了一個函數,但是由於嵌套循環它工作緩慢。我想了解一下如何改進這些代碼。
假設我們有這樣一個數據幀:
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
下面的代碼reaces目標,但它工作得太慢了。以某種方式改進它有可能嗎?
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
請發佈樣本數據和預期結果。 – Andrie
第1行如何與第3行匹配,但第3行與第1行不匹配? – Backlin