0

我有这样的桌子:

    id BiotinControl1_2 BiotinControl2 BiotinControl3 BiotinTreatment1_2 BiotinTreatment2 BiotinTreatment3 Sequence
1   75       3893050.50     2717893.32      3206861.1         3435216.40        3768203.0 3647604.45 AAAAGAAAVANQGKK
2  192        900604.61      741299.33       937413.2          818936.89         937764.7 751303.46  AAAAGAAAVANQGKK
3 3770         90008.14       87127.07       107568.6           85120.95         101947.6 90152.82   AAFTKLDQVWGSE

我使用下面的代码来重新组织我的数据:

tbl_reo <- melt(tbl_anv, measure.vars=2:7)

所以现在我的数据如下所示:

    id          Sequence         variable      value
1   75   AAAAGAAAVANQGKK BiotinControl1_2 3893050.50 
2  192   AAAAGAAAVANQGKK BiotinControl1_2  900604.61 
3 3770     AAFTKLDQVWGSE BiotinControl1_2   90008.14

我想进行方差分析。我想在一个循环中按 id 来做。因此,首先我为 id 创建了一个表,其中包含所有 6 个值和变量列,该列说明该值属于哪个变量。我想对这两列进行方差分析。

编辑:所以对于每个 id ,我想计算 lm(value~variable)。

aov.test <- summary(aov(tbl_reo$value ~ as.factor(tbl_reo$variable)))

tbl_reo[,5]  <- aov.test[[1]]$'Pr(>F)'[1]

我用来计算方差分析的代码,但它不能正常工作。我想将结果放在我的数据中的额外列中。

tbl_anv <- tbl_all_onlyK[,c("id", "BiotinControl1_2", "BiotinControl2", "BiotinControl3",    "BiotinTreatment1_2", "BiotinTreatment2", "BiotinTreatment3", "Sequence")]

tbl_reo <- melt(tbl_anv, measure.vars=2:7)

dat <- vector("integer", length = ncol(tbl_reo))
names(dat) <- colnames(tbl_reo)

for (var in variable) {
dat[var] <- anova(lm(value ~ tbl_reo[, var], data = tbl_reo))$"Pr(>F)"[1]
}
4

1 回答 1

3

很难理解你想做什么。由于您的问题仍然不清楚,这只是一个近似答案....

但我认为你是在寻找byddplyplyr包中,按组做一些治疗。例如,首先我创建了一些可重现的数据。(请学习如何重现数据,这对解决您的问题至关重要)。

set.seed(1)
vars <- c("id", "BiotinControl1_2", "BiotinControl2", "BiotinControl3",   
         "BiotinTreatment1_2", "BiotinTreatment2", "BiotinTreatment3",
         "Sequence")
tbl_reo <- data.frame(value   = rnorm(100),
                      id = gl(6,100/6),
                      variable= sample(vars,100,rep=TRUE))

所以我的数据是这样的:

str(tbl_reo)
'data.frame':   100 obs. of  3 variables:
 $ value   : num  -0.626 0.184 -0.836 1.595 0.33 ...
 $ id      : Factor w/ 6 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ variable: Factor w/ 8 levels "BiotinControl1_2",..: 2 1 4 2 1 4 4 1 2 5 ...

所以对于每个 id ,我想计算 lm(value~variable) 并比较 ids 之间的 anova ...

因此,使用by您可以获得每个 id 的方差分析,如下所示:

by(tbl_reo,tbl_reo$id,function(x){
  anova(lm(value ~ variable, data = x))$"Pr(>F)"[1]
})

tbl_reo$id: 1
[1] 0.7430758
--------------------------------------------------------------------------------------------------------- 
tbl_reo$id: 2
[1] 0.122237
--------------------------------------------------------------------------------------------------------- 
tbl_reo$id: 3
[1] 0.8914668
--------------------------------------------------------------------------------------------------------- 
tbl_reo$id: 4
[1] 0.7790441
--------------------------------------------------------------------------------------------------------- 
tbl_reo$id: 5
[1] 0.6833726
--------------------------------------------------------------------------------------------------------- 
tbl_reo$id: 6
[1] 0.7323833
于 2013-10-23T13:37:34.457 回答