替换data.frames列表中数据框中的值,并将每个输出保存到新列表中

时间:2016-06-07 14:00:22

标签: r dataframe

我有一个包含多个列和不同行数的data.frames列表,当Cumulative列的值为零但递归时,我想创建一组新的列表,即一个输出,其中累积列的第一个值为零,另一个输出的第二个值为零,依此类推。

以下是我的列表的样子:

$test
$ABO
   Locus   Gene   Link Semantic Combined Cumulative Notes
1    ABO GTF3C5 0.0173   0.2622   0.1398     0.1398  Good
2    ABO  GBGT1 0.0734   0.0790   0.0762     0.2160      
3    ABO    ABO 0.1363   0.0125   0.0744     0.2904      
4    ABO   BRD3 0.0006   0.1048   0.0527     0.3431      
5    ABO   VAV2 0.0020   0.1023   0.0521     0.3952      
6    ABO   WDR5 0.0546   0.0441   0.0494     0.4446      
7    ABO  RPL7A 0.0345   0.0640   0.0493     0.4939      


$ACSL1
   Locus     Gene   Link Semantic Combined Cumulative Notes
37 ACSL1    CENPU 0.3358   0.0000   0.1679     0.1679  Good
38 ACSL1  CCDC110 0.0175   0.2900   0.1538     0.3217      
39 ACSL1 TRAPPC11 0.0143   0.2658   0.1400     0.4617      
40 ACSL1     IRF2 0.0316   0.2063   0.1189     0.5806      
41 ACSL1  ANKRD37 0.0707   0.1001   0.0854     0.6660      
42 ACSL1    ACSL1 0.0333   0.1157   0.0745     0.7405      

$ADAMTS9
     Locus    Gene   Link Semantic Combined Cumulative Notes
56 ADAMTS9   ATXN7 0.1424        1   0.5712     0.5712  Good
57 ADAMTS9 C3orf49 0.3463        0   0.1732     0.7444      

$ADCY5
   Locus   Gene   Link Semantic Combined Cumulative Notes
62 ADCY5  ADCY5 0.4132   0.8535   0.6333     0.6333  Good
63 ADCY5 SEMA5B 0.1679   0.0000   0.0839     0.7172    

$ANK1
  Locus   Gene   Link Semantic Combined Cumulative Notes
75  ANK1   POLB 0.0820   0.2270   0.1545     0.1545  Good    
76  ANK1 NKX6-3 0.2563   0.0000   0.1282     0.2827      
77  ANK1   ANK1 0.1314   0.0690   0.1002     0.3829      
78  ANK1  SFRP1 0.0628   0.1206   0.0917     0.4746      
79  ANK1  AP3M2 0.1118   0.0626   0.0872     0.5618      
80  ANK1   PLAT 0.1554   0.0000   0.0777     0.6395      
81  ANK1 CHRNA6 0.0031   0.1418   0.0725     0.7120   

我一直在尝试实现for loop,但我只获得一个列表,Cumulative列的最后一个值为零。我需要对每个输出列表进行下游分析      到目前为止,这是我的代码:

list.1 <- list()
for (i in 1:length(test)){
    for (j in 1:dim(scores.thres.v2[[i]])[1]){
        df <- scores.thres.v2[[i]]
        df[j,"Cumulative"] <- 0
        list.1[[i]] <- df
    }
}

由于

1 个答案:

答案 0 :(得分:1)

我对您的问题的解释:遍历列表中的每个data.frame。在循环内,遍历每一行并返回一个data.frame,其中变量&#34;累积&#34;最终结果是数据框列表的列表。

以下是实现此目的的一种方法:

myList <- lapply(test, function(i) lapply(1:nrow(i),
                                          function(j) {i[j, "Cumulative"] <- 0; i}))

数据

ABO <- read.table(header=T, , stringsAsFactors=F, text="Locus   Gene   Link Semantic Combined Cumulative
1    ABO GTF3C5 0.0173   0.2622   0.1398     0.1398
2    ABO  GBGT1 0.0734   0.0790   0.0762     0.2160      
3    ABO    ABO 0.1363   0.0125   0.0744     0.2904      
4    ABO   BRD3 0.0006   0.1048   0.0527     0.3431      
5    ABO   VAV2 0.0020   0.1023   0.0521     0.3952      
6    ABO   WDR5 0.0546   0.0441   0.0494     0.4446      
7    ABO  RPL7A 0.0345   0.0640   0.0493     0.4939")

ACSL1 <- read.table(header=T, , stringsAsFactors=F, text="Locus     Gene   Link Semantic Combined Cumulative
37 ACSL1    CENPU 0.3358   0.0000   0.1679     0.1679
38 ACSL1  CCDC110 0.0175   0.2900   0.1538     0.3217      
39 ACSL1 TRAPPC11 0.0143   0.2658   0.1400     0.4617      
40 ACSL1     IRF2 0.0316   0.2063   0.1189     0.5806      
41 ACSL1  ANKRD37 0.0707   0.1001   0.0854     0.6660      
42 ACSL1    ACSL1 0.0333   0.1157   0.0745     0.7405")

test <- list("ABO"=ABO, "ACSL1"=ACSL1)