Примените функцию, сгруппировав два столбца и сохранив ее в новом столбце. - PullRequest
0 голосов
/ 21 ноября 2018

Имеет следующий df data.frame в R:

вызов df:

Id1 Id2   var1    var2
A  CODE_1 9625    0.110 
A  CODE_1 10625   0.210
A  CODE_2 3441    0.0604
A  CODE_2 22372   0.237
A  CODE_3 4611    0.0792
A  CODE_3 2859    0.0530
B  CODE_1 2295    0.0308
B  CODE_1 4398    0.0474
B  CODE_2 2464    0.0353
B  CODE_2 342     0.0596
B  CODE_3 2600    0.229
B  CODE_3 429     0.0762

Как я могу применить следующую функцию:

myfun<- function(x,y,z,w){
  output <- list()
  output$den <- (x-z)/sqrt(((x*(1-x))/y)+((z*(1-z))/w))
  return(output)
}

иполучить наконец:

Id1 Id2    var1    var2   Val
A   CODE_1 9625    0.27   -16.1
A   CODE_1 8625    0.19   -16.1
A   CODE_2 3441    0.0604 -35.6
A   CODE_2 22372   0.237  -35.6
A   CODE_3 4611    0.0792  4.5
A   CODE_3 2859    0.0530  4.5
B   CODE_1 2295    0.0308  -3.440912
B   CODE_1 4398    0.0474  -3.440912
B   CODE_2 2464    0.0353  -1.82
B   CODE_2 342     0.0596  -1.82
B   CODE_3 2600    0.229   10.3
B   CODE_3 429     0.0762  10.3

Код, по сути, принимает Id2 и Id2, как в следующем ручном процессе:

A  CODE_1 9625    0.27   
A  CODE_1 8625    0.19   

и применяет функцию, сохраняя результат в столбце в соответствующем порядке,как показано в примере.

myfun(0.110,9625,0.19,8625)$den

A  CODE_1 9625    0.27   -16.1
A  CODE_1 8625    0.19   -16.1

В момент я пробую некоторые методы, такие как:

df %>% group_by(Id1, Id2)%>%select(var1, Var2)%>% xxxxxxx

Я чувствую, что xxxxxxx - это в основном одна простая строка, но я потерян ..

1 Ответ

0 голосов
/ 21 ноября 2018

Мы можем изменить функцию

uni_prop.test <- function(x,y,z,w){  
    (x-z)/sqrt(((x*(1-x))/y)+((z*(1-z))/w))

  }

и затем после группировки по 'Ti', 'Exp' создать 'var3', приняв аргументы в качестве значений first и last 'var1 'и' var2 '.Здесь мы предполагаем, что в каждой группе будет только два наблюдения (на примере)

library(dplyr)
df %>% 
   group_by(Ti, Exp) %>% 
   mutate(var3 = uni_prop.test(first(var2), first(var1), last(var2), last(var1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...