提问人:K.W 提问时间:11/10/2023 最后编辑:K.W 更新时间:11/10/2023 访问量:57
编写循环以通过在 R 中子集数据来创建多个数据帧
Writing a loop to create multiple dataframes by subsetting data in R
问:
我在以下方面遇到了问题:如果我想浏览我的数据帧并在指定时间(假设时间 = 11)将每个“剂量”的“生存”保存到每个线和性别组合中,到单独的数据帧中,然后保存每个数据帧,我该如何在 R 中做到这一点?
时间 | 生存 | 线 | 性 | 剂量 |
---|---|---|---|---|
28 | 0.95 | 138 | F | 1 |
30 | 0.85 | 138 | F | 1 |
32 | 0.75 | 138 | F | 1 |
11 | 0.45 | 138 | F | 1 |
15 | 0.15 | 138 | F | 1 |
16 | 0.25 | 138 | F | 1 |
18 | 0.15 | 138 | F | 1 |
40 | 0.25 | 138 | F | 1 |
28 | 0.95 | 138 | F | 10 |
30 | 0.85 | 138 | F | 10 |
32 | 0.75 | 138 | F | 10 |
11 | 0.65 | 138 | F | 10 |
15 | 0.15 | 138 | F | 10 |
16 | 0.25 | 138 | F | 10 |
18 | 0.15 | 138 | F | 10 |
40 | 0.25 | 138 | F | 10 |
28 | 0.95 | 138 | M | 1 |
30 | 0.85 | 138 | M | 1 |
32 | 0.75 | 138 | M | 1 |
11 | 0.45 | 138 | M | 1 |
15 | 0.15 | 138 | M | 1 |
16 | 0.25 | 138 | M | 1 |
18 | 0.15 | 138 | M | 1 |
40 | 0.25 | 138 | M | 1 |
28 | 0.95 | 138 | M | 10 |
30 | 0.85 | 138 | M | 10 |
32 | 0.75 | 138 | M | 10 |
11 | 0.35 | 138 | M | 10 |
15 | 0.15 | 138 | M | 10 |
16 | 0.25 | 138 | M | 10 |
18 | 0.15 | 138 | M | 10 |
40 | 0.25 | 138 | M | 10 |
28 | 0.95 | 140 | F | 10 |
30 | 0.85 | 140 | F | 10 |
32 | 0.75 | 140 | F | 10 |
11 | 0.45 | 140 | F | 10 |
15 | 0.15 | 140 | F | 10 |
16 | 0.25 | 140 | F | 10 |
18 | 0.15 | 140 | F | 10 |
40 | 0.25 | 140 | F | 10 |
28 | 0.95 | 140 | M | 10 |
30 | 0.85 | 140 | M | 10 |
32 | 0.75 | 140 | M | 10 |
11 | 0.45 | 140 | M | 10 |
15 | 0.15 | 140 | M | 10 |
16 | 0.25 | 140 | M | 10 |
18 | 0.15 | 140 | M | 10 |
40 | 0.25 | 140 | M | 10 |
我希望生成的数据帧如下所示: 假设对于第 138 行 time=11 的女性:
生存 | 剂量 |
---|---|
0.45 | 1 |
0.65 | 10 |
我想在我的数据帧中为 time=11 的每个线和性别组合执行此操作,并为每个线和性别组合的生存和剂量制作新的数据帧并保存它们。
答:
2赞
Friede
11/10/2023
#1
你可以像这样split()
ls_df <- split(data, list(data$Time, data$Line, data$Sex))
这是一个数据框列表。第一个看起来像
> 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)
评论