Фильтрация фрейма данных на основе значений во втором фрейме данных

У меня есть 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

Я хотел бы отфильтровать каждую ячейку в at1 на основе значения в соответствующей ячейке в bt1 (0 или 1 )и сохранить результат в новом кадре данных ct1. Например, если bt1[1, "Sample1"] = 1, то ct1[1, "Sample1"] = at1[1, "Sample1"]. Если bt1[1, "Sample1"] = 0, то ct1[1, "Sample1"] = 0. Мои исходные фреймы данных имеют более 100 столбцов и более 30 000 строк.

Мне было интересно, есть ли более простой способ, чем писать циклы if -(, например.с помощью «применить»? ).

9
задан Arun 30 March 2013 в 15:45
поделиться