私は2つのデータフレームを持っています:
at1 = data.frame(ID = c("A", "B", "C", "D", "E"), Sample1 = rnorm(5, 50000, 2500),
Sample2 = rnorm(5, 50000, 2500), Sample3 = rnorm(5, 50000, 2500),
row.names = "ID")
Sample1 Sample2 Sample3
A 52626.55 51924.51 50919.90
B 51430.51 49100.38 51005.92
C 50038.27 52254.73 50014.78
D 48644.46 53926.53 51590.05
E 46462.01 45097.48 50963.39
bt1 = data.frame(ID = c("A", "B", "C", "D", "E"), Sample1 = c(0,1,1,1,1),
Sample2 = c(0,0,0,1,0), Sample3 = c(1,0,1,1,0),
row.names = "ID")
Sample1 Sample2 Sample3
A 0 0 1
B 1 0 0
C 1 0 1
D 1 1 1
E 1 0 0
bt1 (0 または 1) の対応するセルの値に基づいて、at1 のすべてのセルをフィルター処理し、結果を新しいデータ フレーム ct1 に格納したいと考えています。たとえば、bt1[1, "Sample1"] = 1 の場合、ct1[1, "Sample1"] = at1[1, "Sample1"] となります。bt1[1, "Sample1"] = 0 の場合、ct1[1, "Sample1"] = 0 です。元のデータ フレームには、100 を超える列と 30,000 を超える行があります。
if ループを記述するよりも簡単な方法があるかどうか疑問に思っていました (たとえば、「適用」を使用しますか?)。