提问人:Sam 提问时间:2/20/2020 最后编辑:Sam 更新时间:2/21/2020 访问量:112
将 lapply 的输出保存到相应的数据框
Saving output of lapply to respective data frames
问:
我对 R 很陌生。这似乎是一个简单的问题,但我只是不知道解决它的最佳方法。我已经检查了类似的问题,但没有找到我正在寻找的答案。
我有一个数据帧(实际上是 tibbles)列表,我想通过 hablar 包中的 convert() 函数运行它,以转换数据帧中每个变量的所有数据类型。然后,我想覆盖原始数据帧。这是一个简化的示例数据框(注意,所有变量当前都是因子)。为简单起见,我将 adm2 和 adm3 与 adm1 相同,但在我的实际数据中有所不同。
adm1 <- data.frame(admV1 = as.factor(c("male", "female", "male", "female")),
admV2 = as.factor(c("12.2", "13.0", "14.0", "15.1")),
admV3 = as.factor(c("free text", "more free text", "even more free text", "free text again")),
admV4 = as.factor(c("2019-01-01T12:00:00", "2019-01-01T12:00:00", "2019-01-01T12:00:00", "2019-01-01T12:00:00")))
adm1 <- as_tibble(adm1)
adm2 <- adm1
adm3 <- adm1
dis1 <- data.frame(disV1 = as.factor(c("yes", "no", "yes", "no")),
disV2 = as.factor(c("12.2", "13.0", "14.0", "15.1")),
disV3 = as.factor(c("free text", "more free text", "even more free text", "free text again")),
disV4 = as.factor(c("2019-01-01+T12:00:00", "2019-01-01+T12:00:00", "2019-01-01+T12:00:00", "2019-01-01+T12:00:00")))
dis1 <- as_tibble(dis1)
dis2 <- dis1
dis3 <- dis1
我有两种“类型”的数据框:入院和出院。我定义了需要转换为每种数据类型的变量(N.B.在我的实际示例中,每个都是一个包含多个变量名称的字符向量):
# Define data types
adm_chr<- admV3
adm_num<- admV2
adm_fct<- admV1
adm_dte<- admV4
dis_chr<- disV3
dis_num<- disV2
dis_fct<- disV1
dis_dte<- disV4
然后,我创建了一个数据集列表:
# Define datasets
adm_dfs<- list(adm1, adm2, adm2)
dis_dfs<- list(dis1, dis2, dis3)
这是我到目前为止所管理的:
# Write function
convertDataTypes<- function(dfs, type = c("adm", "dis")){
outputs1<- dfs %>% lapply(convert(chr(paste0(type, "_chr")),
num(paste0(type, "_num")),
fct(paste0(type, "_fct"))))
outputs2<- dfs %>% mutate_at(vars(paste0(type, "_dte")),
ymd_hms, tz = "GMT")
}
# Run function
convertDataTypes(adm_dfs, "adm")
我想我需要在 outputs1 和 outputs2 上使用 lapply 来分配变量,但可能有更好的方法来解决这个问题。我将非常感谢您的意见。
答:
1赞
akrun
2/20/2020
#1
如果 'dfs' 是 s 的 a,则list
data.frame
library(hablar)
library(purrr)
library(dplyr)
如果“类型”对应于使用中的每个data.frame
list
map2
convertDataTypes <- function(dfs, type = c("adm", "dis")) {
map2(dfs, type, ~ {
.type <- .y
map(.x, ~ .x %>%
convert(chr(str_c(.type, "_chr")),
num(str_c(.type, "_num")),
fct(str_c(.type, "_fct"))) %>%
mutate_at(vars(str_c(.type, "_dte")),
ymd_hms, tz = "GMT"))
})
}
dfsN <- list(adm_dfs, dis_dfs)
评论
0赞
Sam
2/21/2020
谢谢你的指导。当我调用函数时,我收到一个错误:convert 中的错误(., chr(str_c(.type, “_chr”)), num(str_c(.type, “_num”)), : convert 仅适用于数据帧。convertDataTypes(adm_dfs, "adm")
convertDataTypes(dis_dfs, "dis")
0赞
Sam
2/21/2020
澄清一下,“类型”是指它是入院还是出院,因此它是否应该调用例如“adm_chr”与“dis_chr”作为包含入院/出院变量的字符向量以转换为字符。data.frame
0赞
akrun
2/21/2020
@Sam 你能用一个小的可重复的例子来更新你的帖子吗
评论