如何为索引表(从骨架到肉体)进行索引值匹配?

时间:2017-01-20 15:59:54

标签: r dataframe match

我有data.frame,它填充了数字位置索引,我还有最小的data.frame,其中数字索引与p.value配对。但是,我打算在indexDF中搜索数字索引的p.value,并构造用于fisher方法的indexDF的p.value表。是否有从索引(骨架)到p.value(肉体)的值匹配函数?我怎样才能有效地实现这一目标?如何在indexDF中搜索数字索引的p.value并构建其pvalue表以按行梳理pvalue?任何人都可以给我一个简化这个过程的想法吗?有什么想法吗?

这是索引值对表,其中带有值的数字索引(用于通过给定的数字索引搜索pvalue):

修改

valuePairDB已更新。请注意,某些不同的数字索引可能具有相同的p.value,但这并不重复。

valuePairDB <- data.frame(
    subjIdx = c(1,2,3,4,5,6,7, 8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,
                17 ,18, 19, 20, 21, 22),
    pvalue = c(1e-48 ,1e-07 ,1e-10 ,1e-08 ,1e-04 ,1e-15 ,1e-04 ,1e-04 ,1e-38 ,1e-54,
               1e-21 ,1e-14 ,1e-12, 1e-21, 1e-07, 1e-32 ,1e-04 ,1e-49, 1e-13 ,1e-13,
               1e-11 ,1e-05))

以下是我将与fisher方法合作的索引表:

indexDF <- data.frame(
    sub1=c(1,2,3,4,5,6,7, 8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,
           17 ,18, 19, 20, 21, 22),
    sub2=c(10 ,12 ,12, 20 ,14 ,20 ,21 ,16 ,17,1 ,18,2 ,19,5,
           21,8,9,2,13,5,7,8),
    sub3=c(18,18,18 ,0,20 ,0 ,0,22 ,22,0,0 ,18,0 ,20,0 ,22,
           0 ,12 ,0 ,14 ,15 ,16)
)

以下是indexDF中填充数值索引的pvalue所需的data.frame(desiredDF只是所需输出的最小表示)

desiredDF <- data.frame(
    sub1.pv=c(1e-48,1e-07,1e-10,1e-08),
    sub2.pv=c(1e-54,1e-14,1e-14,1e-13),
    sub3.pv=c(1e-49,1e-49,1e-49,0)
)

我想找出来自indexDF的{​​{1}}中每个数字索引的pvalue,并为fisher方法构建新的data.frame(表格数据):

valuePairDF

如何为fisher <- pchisq(chisq, df, lower.tail = FALSE) cmb.pv <- apply(desiredDF,1, fisher) 进行这种索引值匹配并构造相应的pvalue表?如何实现我想要的输出?在此先感谢:)

1 个答案:

答案 0 :(得分:1)

您可以使用lapply循环浏览indexDF,对于每列,使用匹配查找行,其中index与主题索引匹配,并将其替换为相应的{ {1}}:

p.value

如果您需要将indexDF[] <- lapply(indexDF, function(col) valuePairDB$pvalue[match(col, valuePairDB$subjIdx)]) head(indexDF) # sub1 sub2 sub3 #1 1e-48 1e-54 1e-49 #2 1e-07 1e-14 1e-49 #3 1e-10 1e-14 1e-49 #4 1e-08 1e-13 NA #5 1e-04 1e-21 1e-13 #6 1e-15 1e-13 NA 替换为0,则可以执行NA

相应的indexDF[is.na(indexDF)] <- 0解决方案将使用dplyr

mutate_all