gpt4 book ai didi

替换数据框列表中编号列的 NA

转载 作者:行者123 更新时间:2023-12-04 11:32:09 24 4
gpt4 key购买 nike

我有以下结构的大量数据框列表:

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 的列并用 0 替换那里的所有 NA。然后,我想在每个 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))
)

谢谢你们!

最佳答案

这是一个 依赖于 data.table 的方法在 lapply() 中成立的按引用更新调用。

library(data.table)
lapply(df.list, setDT)

lapply(df.list,
function(dt) {
cols <- grep('^lorem', names(dt))
setnafill(dt, fill = 0L, cols = cols)
dt[, mean_lorem := rowMeans(.SD), .SDcols = cols]
})
#> [[1]]
#> foo lorem1968 lorem1969 mean_lorem
#> 1: 1 6 0 3.0
#> 2: 2 0 17 8.5
#> 3: 3 0 0 0.0
#> 4: 4 8 19 13.5
#> 5: 5 0 20 10.0
#>
#> [[2]]
#> ipsum lorem1969 lorem1970 mean_lorem
#> 1: 11 0 22 11.0
#> 2: 12 17 0 8.5
#> 3: 13 0 24 12.0
#> 4: 14 19 0 9.5
#> 5: 15 20 0 10.0

关于替换数据框列表中编号列的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58783031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com