在R中创建一个函数,该函数完成以下操作

在R中创建一个函数,该函数完成以下操作,r,R,列A-F是标识列-(1,0)。列G的值为“WLB0”、“WLB2”:“WLB10”和“WLB46”、“WLB89” 我试着对A-F的每一个G列的排列做如下的操作 我正在寻找一个要调用的函数,而不是使用我编写的这个非常笨拙的代码 测试数据可在底部下载 X1 <- {dd <- subset(TEST, TEST$A == 1 & TEST$G =="WLB10"); de <-transform(dd, RP = sum(dd$I)/sum(dd$H));mean(de$

列A-F是标识列-(1,0)。列G的值为“WLB0”、“WLB2”:“WLB10”和“WLB46”、“WLB89”

我试着对A-F的每一个G列的排列做如下的操作

我正在寻找一个要调用的函数,而不是使用我编写的这个非常笨拙的代码

测试数据可在底部下载

X1 <- {dd <- subset(TEST, TEST$A == 1 & TEST$G =="WLB10"); de <-transform(dd, RP = sum(dd$I)/sum(dd$H));mean(de$RP)}

X2 <- {dd <- subset(TEST, TEST$A == 1 & TEST$G =="WLB8"); de <-transform(dd, RP = sum(dd$I)/sum(dd$H));mean(de$RP)}

X3 <- {dd <- subset(TEST, TEST$B == 1 & TEST$G =="WLB10"); de <-transform(dd, RP = sum(dd$I)/sum(dd$H));mean(de$RP)}

TEST1$finalnumber <-ifelse(TEST1$A == 1 & TEST1$G == "WLB10", X1,

                       ifelse(TEST1$A == 1 & TEST1$G == "WLB8", X2,

                              ifelse(TEST1$B == 1 & TEST1$G == "WLB10", X3, 0)))

X1对于在
de
行中将RP设置为常量的目的,我有点困惑,但我希望下面的一段代码会让您有所收获
ddply
melt
是这类事情的两个重要功能

library(plyr)
library(reshape)
long <-  melt(TEST, measure.vars=LETTERS[1:6])
#long <- subset(variable==1)
shorter <- ddply(long, .(G, variable, value), summarize, RP=sum(I)/sum(H))
库(plyr)
图书馆(重塑)

为什么取1的平均值<代码>平均值(de$RP)
它是总和(dd$I)/总和(dd$H)的平均值。我这样做是为了使它成为一个标量值。在较大的数据集中有多个。不,这始终是一个标量
sum
返回一个标量。如果我运行>transform(dd,RP=sum(dd$I)/sum(dd$H))-我将得到以下结果:transform(dd,RP=sum(dd$I)/sum(dd$H))A B C D E F G H I RP 29 1 0 0 0 0 0 0 0 WLB10 1 0.5675676 60 1 0 0 0 0 0 0 WLB10 1 0.5675676 82 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5675676当我运行平均值时,我得到了我需要的一个数字。>平均值(de$RP)[1]0.5675676
long <-  melt(TEST1, measure.vars=LETTERS[1:6])
ind <-  match(paste0(long$G, long$variable), paste0(shorter$G, shorter$variable))
long$final <- shorter$RP[ind]