r语言 - 创建包含来自另一个 df 的结果的 df 的函数(抱歉措辞不好,但包括可重现的示例)



我仍然是初学者,所以请原谅我的糟糕措辞。如果您有如何改写的提示,我很乐意纠正这一点。无论如何,这就是问题所在:

我有一个包含差异表达分析结果的 df 列表。 现在我想创建一个新的 df,用 TRUE 或 FALSE(该组中的 sig diff 或 nor(总结结果。 我发现了如何手动执行此操作,但由于我的列表包含 250 个 dfs,手动创建它可能是一个坏主意。

也许你可以帮我写一个函数/循环来实现这一目标? 非常感谢,我希望示例代码在解释我想要的东西方面做得比我的话更好:

#data
goalDF <- data.frame(
proteins = letters[seq( from = 1, to = 20 )])
firstDF <- data.frame(
proteins = c('a', 'c', 'd'),
expression = c(1, 2, 4))

secondDF <- data.frame(
proteins = c('d', 'e', 'g'),
expression = c(2, 3, 3))

thirdDF <- data.frame(
proteins = c('f', 'h', 'a'),
expression = c(4, 4, 1))

list_with_results <- list(
first = firstDF,
second = secondDF,
third = thirdDF)

#combine
goalDF$first <- goalDF$proteins %in% list_with_results$first$proteins
goalDF$second <- goalDF$proteins %in% list_with_results$second$proteins
goalDF$third <- goalDF$proteins %in% list_with_results$third$proteins

有没有自动执行此功能的功能?重要的是,goalDF 中的列名与列表中的 df 名称相同。 如果有dplyr/purr解决方案,我更喜欢它而不是data.table解决方案。

谢谢一堆!

塞巴斯蒂安

这是一个使用dplyrpurrr的选项。

library(dplyr)
library(purrr)
goalDF <- data.frame(
proteins = letters[seq( from = 1, to = 20 )])
firstDF <- data.frame(
proteins = c('a', 'c', 'd'),
expression = c(1, 2, 4))

secondDF <- data.frame(
proteins = c('d', 'e', 'g'),
expression = c(2, 3, 3))

thirdDF <- data.frame(
proteins = c('f', 'h', 'a'),
expression = c(4, 4, 1))

list_with_results <- list(
first = firstDF,
second = secondDF,
third = thirdDF)
purrr::map_dfc(list_with_results, 
~ goalDF$proteins %in% .$proteins) %>% 
cbind(goalDF, .)
#>    proteins first second third
#> 1         a  TRUE  FALSE  TRUE
#> 2         b FALSE  FALSE FALSE
#> 3         c  TRUE  FALSE FALSE
#> 4         d  TRUE   TRUE FALSE
#> 5         e FALSE   TRUE FALSE
#> 6         f FALSE  FALSE  TRUE
#> 7         g FALSE   TRUE FALSE
#> 8         h FALSE  FALSE  TRUE
#> 9         i FALSE  FALSE FALSE
#> 10        j FALSE  FALSE FALSE
#> 11        k FALSE  FALSE FALSE
#> 12        l FALSE  FALSE FALSE
#> 13        m FALSE  FALSE FALSE
#> 14        n FALSE  FALSE FALSE
#> 15        o FALSE  FALSE FALSE
#> 16        p FALSE  FALSE FALSE
#> 17        q FALSE  FALSE FALSE
#> 18        r FALSE  FALSE FALSE
#> 19        s FALSE  FALSE FALSE
#> 20        t FALSE  FALSE FALSE

最新更新