在R中创建一个函数,该函数完成以下操作
列A-F是标识列-(1,0)。列G的值为“WLB0”、“WLB2”:“WLB10”和“WLB46”、“WLB89” 我试着对A-F的每一个G列的排列做如下的操作 我正在寻找一个要调用的函数,而不是使用我编写的这个非常笨拙的代码 测试数据可在底部下载在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$
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]