0
のレベルの各組み合わせの間で一致の出力行列へのデータフレームのリストでは、ループのために私はそうのようなデータフレームを持っている:R:要因
region plot species
1 1A A_B
1 1B B_C
1 1C A_B
1 1D C_D
2 2A B_C
2 2A E_F
2 2B B_C
2 2B E_F
2 2C E_F
2 2D B_C
3 3A A_B
3 3B A_B
このデータフレームは、数千行のために行くので、私は希望ループを使用して: 1)領域ごとにデータをサブセット化します。 2)次に、サブセットされた各領域内のプロット のすべてのペアごとの比較のための行列を作成します。
この場合、行列のi次元とj次元は領域内のプロットIDであり、行列の塗りつぶしは共有される種の組み合わせの数を含みます。満たされていない行列の半分は、NAsで埋められます。これらの行列はリストに入れられます。この例では、結果は次のようになります。ここでは
resultslist<-
[[1]] 1A 1B 1C 1D
1A NA NA NA NA NA
1B 0 NA NA NA NA
1C 1 0 NA NA NA
1D 0 0 0 NA NA
[[2]] 2A 2B 2C 2D
2A NA NA NA NA NA
2B 2 NA NA NA NA
2C 1 1 NA NA NA
2D 1 1 0 NA NA
[[3]] 3A 3B
3A NA NA
3B 1 NA
は、私が試してみましたループです:
data<- subset(file, select = c(region,plot, species))
sublist=NA
for (i in unique(data$region)){
sublist[i]<-list(subset(data, data[,1] == i))
print(i)
}
results = list()
for (i in 1: length(unique(sublist))){
output<- matrix(0, nrow = length(plot), ncol = length(plot))
plot_i<-unique(sublist[[i]][[2]])
plot_j<-unique(sublist[[i]][[2]])
output[i,j]<-length(intersect(plot_i$species, plot_j$species))
results[[i]]=output
}
results
はお時間をありがとうございました。このコードは、私があなたに提供したサンプルデータを使用したときに効果的でした。しかし、実際のデータを使ってみると、次のようなエラーが出ます: 'rownames < - '( '* tmp *'、value = 66L)のエラー: 'dimnames'の長さ[1]これはかもしれない?また、コードの7行目で一貫性のために提供したコードに対する1つの小さな修正:for(一意的な(df $ region)のr) "df"を "data"に変更する必要があります。 @GyB – Danielle
ええ、データを見ることなく伝えるのは難しいです。 rownamesを定義する行を次のように変更することができますか? 'rownames(output)< - colnames(output)< - names(myset)'? – Bea
訂正ありがとう、私は行を編集しました – Bea