2015-06-23 138 views
1

我有一系列表示单独分子的数据帧的截止值的子集的多个数据帧(或一个列表),其包含hundeds /千分数从使用分子实验(F0001, F0002,...,)。每个数据框都像这样。的R - 基于从基准数据帧

F0001

PoseID Score 
1 AAAA_1 -13.70 
2 AAAA_2 -9.21 
3 AAAA_3 -7.60 
4 AAAA_4 -6.28 
5 .... 

F0002

PoseID Score 
1 AAAB_1 -14.90 
2 AAAB_2 -13.92 
3 AAAB_3 -13.49 
4 AAAB_4 -11.95 
5 .... 

等等等等

基于截止,我想子设置数据抛出任何高于截止点的姿势,所以,进行简单的二元比较。轻微的复杂因素是,截止因每个的(F0001, F0002,...,),所以我已经先行一步,并存储这些数据帧中的(姑且称之为cutoffs

临界值

 FragmentID  ScoreCutOff 
1 F0001   -9.69 
2 F0002   -9.33 
3 F0003   -8.50 
4 .... 

所以我想的问题是,我执行和每个数据帧cutoffs之间的比较或所有的数据帧添加到列表中,并执行和数据帧存在的列表cutoffs之间的比较?

我感觉这Ari Friedman's answer是在球场,所以我很担心有sapply工具/任何得到它的工作,通常是一个很容易解决这类问题可以用Python/CPP/Java的嵌套循环和数据结构,但我是新的做在R所以我很想听听别人有什么想法。当然,如果我在此期间自己解决这个问题,会为解决方案发表评论。

+0

我d首先建立从截断$ FragmentID列名为dataframes的列表,然后使用'mapply'该列表作为第一个参数,第二个参数为相应的$ ScoreCutoff值上。看起来太多的工作来设置它。你应该学会张贴写在R的例子。 –

+0

是的欢呼,我是新来的网站,所以没有想到这样做。 – Corey

+0

以上评论是@人谁提醒我打勾正确的解决方案,但其评论不再存在。 :) – Corey

回答

0

假设DF1,DF2你dataframes,你可以,如果你想拥有所有dataframes seperately尝试这种使用lapply

dflist = list(df1, df2) 
names(dflist) = cutoffs$FragmentID 

out = lapply(names(dflist), 
     function(x){ 
     cfval = subset(cutoff, FragmentID %in% x); 
     subset(dflist[[x]], Score < cfval$ScoreCutOff) 
     }) 

names(out) = cutoff$FragmentID 

#> out 
#$F0001 
# PoseID Score 
#1 AAAA_1 -13.7 
# 
#$F0002 
# PoseID Score 
#1 AAAB_1 -14.90 
#2 AAAB_2 -13.92 
#3 AAAB_3 -13.49 
#4 AAAB_4 -11.95 

后,你可以这样做

# data-frames with names F0001, F0002, .... 
list2env(out,.GlobalEnv) 
+1

非常完美。另一个解决方案没有错,但我现在正在挖掘s/l/m /。再次欢呼! – Corey

1

根据您提供的信息,这样的事情应该做的工作:

# bring your data.frames into a list: 
f <- list(F0001, F0002) 
> f 
[[1]] 
    PoseID Score 
1 AAAA_1 -13.70 
2 AAAA_2 -9.21 
3 AAAA_3 -7.60 
4 AAAA_4 -6.28 

[[2]] 
    PoseID Score 
1 AAAB_1 -14.90 
2 AAAB_2 -13.92 
3 AAAB_3 -13.49 
4 AAAB_4 -11.95 

# subset per list item 
for(i in 1 : length(f)) 
    f[[ i ]] <- f[[ i ]][ f[[ i ]][ 2 ] < cutoffs[ i, 2 ], ] 
> f 
[[1]] 
    PoseID Score 
1 AAAA_1 -13.7 

[[2]] 
    PoseID Score 
1 AAAB_1 -14.90 
2 AAAB_2 -13.92 
3 AAAB_3 -13.49 
4 AAAB_4 -11.95 

不知道你的意思是什么“上面截止”,也许你有扭转低于<操作。我还假设在cutoffs,数据具有完全相同的顺序如在data.frames的列表中,否则某些附加操作,以识别对应的截止可能是必要的。

+0

对不起,应该更清楚。基本上,这些能量得分如此之低=更好,但我在量级上使用'高于'。 – Corey

+1

您的解决方案也是一个很好的解决方案,仅供参考,但我在此案中对apply方法进行投票,主要是为了保持一致性,因为这就是我最近一直这样做的方式。我是新的,所以不能只是upvote呢...... – Corey