R 如何使索引表的索引值匹配(从骨架到肉体)?
我有data.frame,其中填充了数字位置索引,还有minimal data.frame,其中数字索引与p.value配对。然而,我打算在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?谁能给我一个可能的方法来简化这个过程?有什么想法吗 以下是索引-值对
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)]))