【发布时间】:2020-03-06 01:24:26
【问题描述】:
我有大量具有以下结构的数据框:
foo <- 1:5
lorem1968 <- c(6, NA, NA, 8, NA)
lorem1969 <- c(NA, 17, NA, 19, 20)
df1 <- data.frame(foo, lorem1968, lorem1969)
ipsum <- 11:15
lorem1970 <- c(22, NA, 24, NA, NA)
df2 <- data.frame(ipsum, lorem1969, lorem1970)
df.list <- list(df1, df2)
[[1]]
foo lorem1968 lorem1969
1 1 6 NA
2 2 NA 17
3 3 NA NA
4 4 8 19
5 5 NA 20
[[2]]
ipsum lorem1969 lorem1970
1 11 NA 22
2 12 17 NA
3 13 NA 24
4 14 19 NA
5 15 20 NA
我现在想遍历所有名为 loremxxxx 的列,并将那里的所有 NA 替换为 0。然后,我想在每个 df 中创建一个新列,其中包含该特定 df 中包含的所有 loremxxxx 列的平均值。
问题在于这些是原始数据中的重叠面板,因此任何 df1 都包含 lorem1968、lorem1969、lorem1970。 df2 包含 lorem1969, 1970, 1971. 等等。
我尝试选择这样的列:
lorem.cols <- purrr::map(panels.list, function(x)
select(x, starts_with("lorem"))
)
还有:
lorem.cols <- purrr::map(df.list, function(data)
data %>% select(data, starts_with("lorem"))
)
但两者都抛出了一个错误,要么找不到函数,要么给我“选择:”并等待输入。刚刚尝试从select()函数的帮助页面复制。
在我计划像这样更换 NA 之后:
df.list <- purrr::map(df.list, function(data)
data %>% mutate(lorem.cols = replace(is.na(lorem.cols), 0))
)
谢谢各位!
【问题讨论】:
-
在下面看起来是个不错的答案,但仅供参考,选择问题已在此处修复:
lorem.cols <- purrr::map(df.list, function(x) dplyr::select(x, dplyr::starts_with("lorem")) ) -
哦,很高兴知道谢谢!该项目只完成了一半,很高兴知道我可以通过这种方式获得我的 tidyverse 功能:D