R 如何使索引表的索引值匹配(从骨架到肉体)?

R 如何使索引表的索引值匹配(从骨架到肉体)?,r,dataframe,match,R,Dataframe,Match,我有data.frame,其中填充了数字位置索引,还有minimal data.frame,其中数字索引与p.value配对。然而,我打算在indexDF中搜索数值索引的p.value,并为用于fisher方法的indexDF构建p.value表。是否有从索引(骨架)到p.value(肉体)的值匹配函数?我如何才能有效地做到这一点?如何在indexDF中搜索数值索引的p.value,并构建其pvalue表以按行组合pvalue?谁能给我一个可能的方法来简化这个过程?有什么想法吗 以下是索引-值对

我有data.frame,其中填充了数字位置索引,还有minimal 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))
我想从
valuePairDF
中找出
indexDF
中每个数字索引的pvalue,并为fisher方法构建新的data.frame(表格数据):

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)
)
fisher <- pchisq(chisq, df, lower.tail = FALSE)
cmb.pv <- apply(desiredDF,1, fisher)

fisher您可以使用
lappy
indexDF
中循环,对于每一列,使用match查找行,其中
index
与主题索引匹配,并将其替换为相应的
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

您的
valuePairDF
中有这么多重复项,有什么特别的原因吗?
indexDF[]@Psidom我用正确的
valuePairDF
更新了帖子,不同的数字索引可能有相同的p.value,但这不是重复。你能继续考虑我的更新吗?感谢you@Psidom很抱歉问这个简单的问题:使用像这样的
索引[]
的作用域有什么好处?我只是想知道背后的想法。谢谢。据我所知,它的优点不多,但它提供了一个数据框容器来保存新数据,这样您就不必将返回的列表转换为数据框,从而节省了一些输入。是否可以使用
dplyr
使其更优雅?如果我要尝试
dplyr
,我怎么能做同样的事情?非常感谢。
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
indexDF %>% mutate_all(funs(valuePairDB$pvalue[match(., valuePairDB$subjIdx)]))