Я надеюсь, что кто-то может помочь со следующим, поскольку я думаю, что это довольно просто, но я борюсь с этим.
У меня есть два кадра данных (упрощенно ниже):
dataframe 1
Area 1 Area 2 Area 3 Area 4
Yes No No No
Yes No No Yes
No Yes Yes No etc
dataframe 2
rep 1 rep 2 rep 3 etc
0.1 0.2 0.3
0.2 0.1 0.4
0.5 0.6 0.8
В каждом из этих фреймов данных может быть около 100 000 строк.
Я бы хотел, чтобы сумма каждого столбца в кадре данных по строкам равнялась "Да" в кадре данных 1. В идеале я бы хотел получить
Area 1 Area 2 Area 3 Area 4
rep1 0.3 0.5 0.5 0.2
rep2 0.3 0.6 0.6 0.1
rep3 0.7 0.8 0.8 0.4
и т.д.
У меня есть следующий код, который дает мне правильный вывод данных, но colSums равен нулю, так как я не уверен, как правильно ссылаться на столбец для подстановки строк:
extractedsums<-apply(dataframe1, 2, function(i){
df<-dataframe1$i=="Yes"
i<-colSums(data.frame(dataframe2=dataframe2[df,]))
})
Проблема в строке
df<-dataframe1$i=="Yes"
, так как он неправильно ссылается на столбец dataframe1.
Я пытался найти правильный способ ссылки на столбец правильно, но я не смог понять литературу достаточно, чтобы выработать решение.
Если кто-нибудь может указать мне правильное направление на то, как исправить это или на более эффективный способ выполнить вышесказанное, я был бы очень признателен.
Спасибо
Я не уверен, как использовать dput, но следующий код должен сгенерировать пример кода
Area1<-c("Yes", "Yes", "No", "No")
Area2<-c("No","Yes", "Yes", "No")
Area3<-c("No", "No","Yes", "Yes")
Area4<-c("No","Yes","No","Yes")
dataframe1<-data.frame(cbind(Area1, Area2, Area3, Area4))
rep1<-c(1:3)
rep2<-c(4:6)
rep3<-c(2:4)
dataframe2<-data.frame(cbind(rep1, rep2, rep3))