私は64個のデータフレームを持つリストを持っています。 Dataframe 1とDataframe 5は同じ行名を持つ必要があります。 2および6,3,7などと同じです。 私はforループを実行して新しいリストを作成できますが、何かがうまくいきません。それを再現するためにここでリストに格納されたデータフレームの行をフィルタリングし、新しいリストを作成する
簡単な例:
# Create dataframes and store in list
dfA <- data.frame(v1=c(1:6), v2=c("x1","x2","x3","x4","x5","x6"))
dfB <- data.frame(v1=c(1:6), v2=c("x1","x2","x3","x4","x5","x6"))
dfC <- data.frame(v1=c(1:5), v2=c("x1","x2","x3","x4","x5"))
dfD <- data.frame(v1=c(1:4), v2=c("x1","x2","x3","x4"))
example_dataframes = list(dfA, dfB, dfC, dfD)
# These vectors give the order of the process
vectorA = c(1,2)
vectorB = c(3,4)
# Create new list and start for loop
filtered_dataframes = list()
for (i in vectorA) {
for (j in vectorB) {
df1 = example_dataframes[[i]]
df2 = example_dataframes[[j]]
test = intersect(df1$v2, df2$v2)
filtered_dataframes[[i]] <- df1[which(df1$v2 %in% test),]
filtered_dataframes[[j]] <- df2[which(df2$v2 %in% test),]
}
}
この例では、私が得ることを期待:
sapply(filtered_dataframes, nrow)
> 5 4 5 4
2層の再帰的なサイクルではなく、vectorAとvectorBのインデックスをトラバースするために1つのfor-cycleだけが必要です。 – mt1022