2016-05-04 3 views
0

私は、所与の場所および年の品種の有無を示す作物品種試験のためのデータフレームを持っています。次の例は、データのサブセットです。Rでは、共通変数を示す相反テーブルを作成するにはどうすればよいですか?

example<-structure(list(Variety = 1:88, Site1_Yr1 = c(0L, 0L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 1L, 0L, 1L), 
Site2_Yr1 = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L 
), 
Site3_Yr1 = c(0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
Site1_Yr2 = c(0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L), 
Site2_Yr2 = c(0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 
0L, 0L, 1L), 
Site3_Yr2 = c(1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L)), 
.Names = c("Variety", "Site1_Yr1", "Site2_Yr1", "Site3_Yr1", "Site1_Yr2", "Site2_Yr2", "Site3_Yr2"), class = "data.frame", row.names = c(NA, -88L)) 

データフレームを要約して、場所と年の組み合わせの間に共通する品種の数を示す相反テーブルを作成します。集計されたデータは、次のようになります。同じではない品種の数と共通品種の割合を示すことも有用です。

result <- structure(list(X = structure(c(1L, 3L, 5L, 2L, 4L, 6L), 
.Label = c("Site1_Yr1", 
"Site1_Yr2", "Site2_Yr1", "Site2_Yr2", "Site3_Yr1", "Site3_Yr2"), 
class = "factor"), Site1_Yr1 = c(5L, 4L, 0L, 2L, 1L, 1L), 
Site2_Yr1 = c(4L, 11L, 4L, 5L, 1L, 1L), 
Site3_Yr1 = c(0L, 4L, 9L, 4L, 0L, 1L), 
Site1_Yr2 = c(2L, 5L, 4L, 10L, 1L, 1L), 
Site2_Yr2 = c(1L, 1L, 0L, 1L, 6L, 1L), 
Site3_Yr2 = c(1L, 1L, 1L, 1L, 1L, 13L)), 
.Names = c("X", "Site1_Yr1", "Site2_Yr1", "Site3_Yr1", "Site1_Yr2", "Site2_Yr2", "Site3_Yr2"), 
class = "data.frame", row.names = c(NA, -6L)) 

ご意見をいただければ幸いです!

更新:私は実際にデータセットにlmoから提供されたバージョンのスクリプトを適用しました。

example2<- structure(list(Davis.1 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 0L, 0L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 3L, 0L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), Davis.2 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 
0L, 3L, 3L, 3L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), Davis.3 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 3L, 3L, 3L, 3L, 0L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), DREC.1 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 3L, 0L, 3L, 
3L, 3L, 3L, 3L, 0L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), DREC.2 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 3L, 3L, 3L, 0L, 3L, 0L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), DREC.3 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 
0L, 3L, 3L, 3L, 3L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), KARE1.1 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 0L, 0L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 3L, 
0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), KARE1.2 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 3L, 0L, 3L, 0L, 
3L, 3L, 3L, 3L, 0L, 0L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), KARE1.3 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 3L, 3L, 3L, 3L, 0L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), KARE2.1 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 3L, 0L, 3L, 
3L, 3L, 3L, 3L, 0L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), KARE2.2 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 3L, 3L, 3L, 0L, 3L, 0L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), KARE2.3 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 
0L, 3L, 3L, 3L, 3L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), WSREC.1 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 0L, 0L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 3L, 
0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), WSREC.2 = c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 
0L, 3L, 3L, 3L, 0L, 3L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), WSREC.3 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 3L, 3L, 3L, 3L, 0L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L)), .Names = c("Davis.1", 
"Davis.2", "Davis.3", "DREC.1", "DREC.2", "DREC.3", "KARE1.1", 
"KARE1.2", "KARE1.3", "KARE2.1", "KARE2.2", "KARE2.3", "WSREC.1", 
"WSREC.2", "WSREC.3"), row.names = c("83G19", "84G62", "85G01", 
"85G03", "86G32", "87P06", "AG1201", "AG1401", "AG2101", "AG2103", 
"AG3101", "DK28E", "DKS-51-01", "DKS-551-0", "DKS-551-01", "DKS-553-6", 
"DKS-553-67", "DKS26-60", "DKS28-05", "DKS37-07", "DKS44-20", 
"DKS51-01", "DKS53-67", "ExP28133", "EXP28133", "KS310", "KS585", 
"NK5418", "NK7829", "NK8416", "R-0413", "R-06173", "R-10413", 
"R-49473", "R-68653", "R-92123", "SP3425"), class = "data.frame") 

サイト年のペアの名前を取得するには:同じ品種をカウントするには

sitePairs <- t(combn(1:15, 2, FUN=function(i) names(example2[,i]))) 

を80%のマッチングの上に実際に存在する場合に

varietyCount <- combn(1:15, 2, FUN=function(i) sum((rowSums(example2[,i])==2))) 

これは、すべてゼロを返します。ほとんどの場合値。明らかに私はスクリプトが何をしているのか誤解しているここで

+0

あなたの試行を見てみましょう。 –

+0

申し訳ありませんが、スクリプトを保存できませんでした。 –

答えて

0

combnを使用して一つの解決策である:

# get names of site-year pairs 
sitePairs <- t(combn(2:7, 2, FUN=function(i) names(example[,i]))) 

# count the same varieties 
varietyCount <- combn(2:7, 2, FUN=function(i) sum((rowSums(example[,i])==2))) 

# put in a data.frame 
data.frame("site1"= sitePairs[,1], "site2"= sitePairs[,2], "varietyCount"= varietyCount, 
      stringsAsFactors=FALSE) 

ここcomb機能は、すべてのペアごとの比較を生成します。私は最初にサイト名を取得するために使用します。計算では、combnからのペアの組み合わせが、これらのペアを使用してデータを適切な列にサブセット化し、両方のサイト年が品種を生成しているかどうかを確認する関数に入力されます(RowSums(...) == 2を使用)。この論理ベクトルは、1と0に強制変換され、合計されます。

例2は0と3で構成されているため、RowSums(...) == 2からRowSums(...) == 6に変更すると、探している数が得られます。

+0

多くの感謝!あなたの例を使用しましたが、問題がありました(上記のアップデートをご覧ください)。 –

+0

@ NicGeorge私が答えたところで説明したように、私はRowSums(...)== 2を使用して、サイトと年の組み合わせが同じタイプを生成したかどうかをトリガーしました。あなたのサンプルデータセットは、ゼロと{0,1}で構成されていました。ただし、新しいデータセットは0と3で構成されているため、この条件を 'RowSums(...)== 6 'に変更すると問題が解決します。 – lmo

関連する問題