R中具有以下df data.frame
:
调用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
基本上是一条简单的线,但是我迷路了。.
答案 0 :(得分:1)
我们可以修改功能
uni_prop.test <- function(x,y,z,w){
(x-z)/sqrt(((x*(1-x))/y)+((z*(1-z))/w))
}
,然后按'Ti','Exp'分组后,通过将参数作为'var1'和'var2'的first
和last
值来创建'var3'。在这里,我们假设每个组只有两个观测值(基于示例)
library(dplyr)
df %>%
group_by(Ti, Exp) %>%
mutate(var3 = uni_prop.test(first(var2), first(var1), last(var2), last(var1)))