提问人:lM__3 提问时间:11/7/2023 更新时间:11/7/2023 访问量:58
通过在 Excel 中为每个主题创建工作表,从 R 数据帧中导出缺失的数据
export missing data from an R dataframe by creating a sheet for each subject in excel
问:
我想通过为每个主题制作一张工作表来导出 excel 文件中缺少数据的列。
例如,我有一个数据帧,如下所示:
编号 | Sexe | 年龄 |
---|---|---|
1 | 1 | 那 |
2 | 2 | 28 |
3 | 那 | 32 |
对于主题 1,我们将在第 1 个 excel 工作表中有如下内容:
编号 | Sexe | 年龄 |
---|---|---|
1 | 1 | 那 |
对于主题 3,这个:
编号 | Sexe | 年龄 |
---|---|---|
3 | 那 | 32 |
因此,主题 2 不会有工作表,因为没有缺少任何数据。
你认为这可能吗?
下面是生成 df 的代码:
ID <- c(1, 2, 3)
sexe <- c(1, 2, NA)
age <- c(NA,28,32)
df <- data.frame(ID, sexe, age)
实际上,我有一个更大的数据帧,所以我会想要一些自动化的东西
提前感谢您的帮助
答:
2赞
Friede
11/7/2023
#1
你可以试试
# required package
library(openxlsx)
# define a function
df_to_xlsx <- function(df, split_variable) {
stopifnot(is.data.frame(df))
df <- df[!complete.cases(df), ]
ls <- split(df, f = split_variable)
ls <- ls[sapply(ls, nrow) > 0L]
names(ls) <- paste0("Subject_", names(ls))
# please specify your path, e.g. getwd() + file name.xlsx
openxlsx::write.xlsx(ls, file = "mydata.xlsx",
keepNA = TRUE, na.string = "NA")
}
# use function
df_to_xlsx(df = df, split_variable = ID)
创建于 2023-11-07 使用 reprex v2.0.2
这将发出警告
#> split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...): data 中的警告 #> length 不是 split 变量的倍数
由于 ID 级别 (3) 的数量不等于 (2) 创建的列表的长度。这是因为我们首先用完整的案例进行子集化,这删除了 的记录,因为它不包含任何 s。split()
ID == 2
NA
管道方法:
df[!complete.cases(df), ] |>
split(f = ID) |>
{ \(x) x[sapply(x, nrow) > 0L]}() |>
{ \(x) setNames(object = x, nm = paste0("Subject_", names(x)))}() |>
openxlsx::write.xlsx(x = _, file = "mydata.xlsx",
keepNA = TRUE, na.string = "NA")
评论
complete.cases