编写一个循环,通过在R中子集化数据来创建多个嵌套帧

wyyhbhjk  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(102)

我在以下方面遇到了麻烦:如果我想在指定的时间(假设时间=11)为每一行和性别组合遍历我的嵌套框并在每个“剂量”下保存“生存”,然后将这些嵌套框中的每一个保存,我怎么能在R中做到这一点呢?
| 时间|生存|线|性|剂量|
| --|--|--|--|--|
| 28 |零点九五| 138 |F| 1 |
| 30 |零点八五| 138 |F| 1 |
| 32 |0.75| 138 |F| 1 |
| 11 |零点四五| 138 |F| 1 |
| 15 |0.15| 138 |F| 1 |
| 16 |零点二五| 138 |F| 1 |
| 18 |0.15| 138 |F| 1 |
| 40 |零点二五| 138 |F| 1 |
| 28 |零点九五| 138 |F| 10 |
| 30 |零点八五| 138 |F| 10 |
| 32 |0.75| 138 |F| 10 |
| 11 |0.65| 138 |F| 10 |
| 15 |0.15| 138 |F| 10 |
| 16 |零点二五| 138 |F| 10 |
| 18 |0.15| 138 |F| 10 |
| 40 |零点二五| 138 |F| 10 |
| 28 |零点九五| 138 |M| 1 |
| 30 |零点八五| 138 |M| 1 |
| 32 |0.75| 138 |M| 1 |
| 11 |零点四五| 138 |M| 1 |
| 15 |0.15| 138 |M| 1 |
| 16 |零点二五| 138 |M| 1 |
| 18 |0.15| 138 |M| 1 |
| 40 |零点二五| 138 |M| 1 |
| 28 |零点九五| 138 |M| 10 |
| 30 |零点八五| 138 |M| 10 |
| 32 |0.75| 138 |M| 10 |
| 11 |零点三五| 138 |M| 10 |
| 15 |0.15| 138 |M| 10 |
| 16 |零点二五| 138 |M| 10 |
| 18 |0.15| 138 |M| 10 |
| 40 |零点二五| 138 |M| 10 |
| 28 |零点九五| 140 |F| 10 |
| 30 |零点八五| 140 |F| 10 |
| 32 |0.75| 140 |F| 10 |
| 11 |零点四五| 140 |F| 10 |
| 15 |0.15| 140 |F| 10 |
| 16 |零点二五| 140 |F| 10 |
| 18 |0.15| 140 |F| 10 |
| 40 |零点二五| 140 |F| 10 |
| 28 |零点九五| 140 |M| 10 |
| 30 |零点八五| 140 |M| 10 |
| 32 |0.75| 140 |M| 10 |
| 11 |零点四五| 140 |M| 10 |
| 15 |0.15| 140 |M| 10 |
| 16 |零点二五| 140 |M| 10 |
| 18 |0.15| 140 |M| 10 |
| 40 |零点二五| 140 |M| 10 |
我希望得到的嵌套框架看起来像这样:假设在time=11时第138行的女性:
| 生存|剂量|
| --|--|
| 0.45 | 1 |
| 0.65 | 10 |
我想为每个品系和性别组合在时间=11时在我的矩阵中做这个,并为每个品系和性别组合的生存和剂量做新的矩阵,并保存那些。

ou6hu8tu

ou6hu8tu1#

你可以像这样做split()

ls_df <- split(data, list(data$Time, data$Line, data$Sex))

字符串
这是一个 Dataframe 列表。

> ls_df[[1L]]
   Time Survival Line Sex Dose
4    11     0.45  138 F      1
12   11     0.65  138 F     10


请注意,有些数据框是空的,因为它们的因子组合不存在。我们应该如何处理这些?我建议删除它们:

ls_df <- ls_df[sapply(ls_df, \(x) dim(x)[1L]) > 0L]


如果您确实希望将剩余的列表条目复制到当前环境中,

list2env(x = ls_df, envir = environment())


如果你真的想把它们分别写入硬盘,一个选择是

path <- getwd() # path to your current directory 
invisible(
  lapply(
    X = names(ls_df), 
    FUN = \(i) write.csv(x = ls_df[[i]], file = paste0(file.path(path, i), ".csv"))
  )
)


您需要在前面的步骤中设置路径到您选择的目录,如path <- getwd()
数据类型:

data <- structure(
  list(
    Time = c(
      "28",
      "30",
      "32",
      "11",
      "15",
      "16",
      "18",
      "40",
      "28",
      "30",
      "32",
      "11",
      "15",
      "16",
      "18",
      "40",
      "28",
      "30",
      "32",
      "11",
      "15",
      "16",
      "18",
      "40",
      "28",
      "30",
      "32",
      "11",
      "15",
      "16",
      "18",
      "40",
      "28",
      "30",
      "32",
      "11",
      "15",
      "16",
      "18",
      "40",
      "28",
      "30",
      "32",
      "11",
      "15",
      "16",
      "18",
      "40"
    ),
    Survival = c(
      "0.95",
      "0.85",
      "0.75",
      "0.45",
      "0.15",
      "0.25",
      "0.15",
      "0.25",
      "0.95",
      "0.85",
      "0.75",
      "0.65",
      "0.15",
      "0.25",
      "0.15",
      "0.25",
      "0.95",
      "0.85",
      "0.75",
      "0.45",
      "0.15",
      "0.25",
      "0.15",
      "0.25",
      "0.95",
      "0.85",
      "0.75",
      "0.35",
      "0.15",
      "0.25",
      "0.15",
      "0.25",
      "0.95",
      "0.85",
      "0.75",
      "0.45",
      "0.15",
      "0.25",
      "0.15",
      "0.25",
      "0.95",
      "0.85",
      "0.75",
      "0.45",
      "0.15",
      "0.25",
      "0.15",
      "0.25"
    ),
    Line = c(
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "138",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140",
      "140"
    ),
    Sex = c(
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "F",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M",
      "M"
    ),
    Dose = c(
      "1",
      "1",
      "1",
      "1",
      "1",
      "1",
      "1",
      "1",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "1",
      "1",
      "1",
      "1",
      "1",
      "1",
      "1",
      "1",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10",
      "10"
    )
  ),
  class = "data.frame",
  row.names = c(NA,
                -48L)

相关问题