我仍然是初学者,所以请原谅我的糟糕措辞。如果您有如何改写的提示,我很乐意纠正这一点。无论如何,这就是问题所在:
我有一个包含差异表达分析结果的 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解决方案。
谢谢一堆!
塞巴斯蒂安
这是一个使用dplyr
和purrr
的选项。
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