ссылка на столбец в функции - PullRequest
0 голосов
/ 13 декабря 2011

Я надеюсь, что кто-то может помочь со следующим, поскольку я думаю, что это довольно просто, но я борюсь с этим.

У меня есть два кадра данных (упрощенно ниже):

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))

1 Ответ

1 голос
/ 13 декабря 2011

В качестве иллюстрации моего комментария, матричное умножение сделало бы это:

> areas <- matrix(c(1,1,0, 0,0,1, 0,0,1, 0,1,0), nrow=3)
> reps <- matrix(c(0.1,0.2,0.5, 0.2,0.1,0.6, 0.3,0.4,0.8), nrow=3)
>
> t(reps) %*% areas
     [,1] [,2] [,3] [,4]
[1,]  0.3  0.5  0.5  0.2
[2,]  0.3  0.6  0.6  0.1
[3,]  0.7  0.8  0.8  0.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...