gpt4 book ai didi

r - 如何将列 append 到列表中的 data.frames,其中该列应包含这些 data.frames 的计算读出结构信息?

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

我有一些我在 R 中读入和修改的数据。对于一个最小的、可重复的示例(reprex),我想将数据作为“在 R”中的表示形式来提供数据结构:
读入数据的代码:

paths <- sprintf("filenames%02d.out", 1:26)
interim <- lapply(paths, read.table, header=FALSE, sep="\t", dec=".", na.strings="NA")
new_col_name <- c("Pos", "LRTD")
out <- lapply(interim, setNames, nm = new_col_name)
现在, lapply(out, head) 允许我们查看 R 对数据的内部表示:
[[1]]
Pos LRTD
1 0 0
2 70557 0
3 104076 0
4 163349 0
5 258229 0
6 356613 0

[[2]]
Pos LRTD
1 0 0
2 171603 0
3 268756 0
4 456513 0
5 594904 0
6 663581 0

[[3]]
Pos LRTD
1 0 0.000
2 171960 0.370
3 217096 0.358
4 254484 0.338
5 320866 0.366
6 432642 0.382

{...}

[[26]]
Pos LRTD
1 0 0
2 185161 0
3 234971 0
4 273218 0
5 319689 0
6 379800 0
所以它是一个 listdata.frame ,有 26 个元素。在这里,我想把我们在上面看到的数字放在方括号中,所以数字 [[1]][[2]][[3]] 等等直到 [[26]] ,作为“元素描述符”。
现在我想要做的是将第三列 append 到 data.frame 中的所有 list s,其中该列包含计算读出的 data.frame s 的结构信息。
详细地说,我想将给定 data.frame 的元素描述符添加到它们各自的 data.frame 中。记住,结果应该是这样的:
[[1]]
Pos LRTD Chr
1 0 0 1
2 70557 0 1

[[2]]
Pos LRTD Chr
1 0 0 2
2 171603 0 2

[[3]]
Pos LRTD Chr
1 0 0.000 3
2 171960 0.370 3

{...}

[[26]]
Pos LRTD Chr
1 0 0 26
2 185161 0 26
由于我很清楚这个 question ,我目前的解决方案是伪代码:
lapply(out, function(x) { x$Chr <- rep("element descriptor","lenght of list");return(x)})
我知道我可以使用 data.frame 获得相应 rapply(out, length) 的长度,但到目前为止我还没有让 rapply 在我的 lapply 命令中工作。
另外,如何在代码中引用元素描述符?

最佳答案

Map 对此很有效。

Map(function(x, ind) transform(x, Chr = ind), out, seq_along(out))
# [[1]]
# Pos LRTD Chr
# 1 0 0 1
# 2 70557 0 1
# 3 104076 0 1
# 4 163349 0 1
# 5 258229 0 1
# 6 356613 0 1
# [[2]]
# Pos LRTD Chr
# 1 0 0 2
# 2 171603 0 2
# 3 268756 0 2
# 4 456513 0 2
# 5 594904 0 2
# 6 663581 0 2
# [[3]]
# Pos LRTD Chr
# 1 0 0.000 3
# 2 171960 0.370 3
# 3 217096 0.358 3
# 4 254484 0.338 3
# 5 320866 0.366 3
# 6 432642 0.382 3
# [[4]]
# Pos LRTD Chr
# 1 0 0 4
# 2 185161 0 4
# 3 234971 0 4
# 4 273218 0 4
# 5 319689 0 4
# 6 379800 0 4
如果您的“元素描述符”确实是名称,则将其替换为
Map(function(x, ind) transform(x, Chr = ind), out, names(out))
它会有效地做同样的事情。
如果您对 lapply 感到满意并想知道它与它的比较,那么该 lapply 的等效 Map 将是:
lapply(names(out), function(nm) transform(out[[nm]], Chr = nm))
你甚至可以用代码打高尔夫球
Map(transform, out, Chr = seq_along(out))
Map(transform, out, Chr = names(out))
(与上面的输出相同)。这恰好有效,因为我们可以在 Map 中使用传递给 f=(函数)参数的命名参数,在这种情况下为 transform

数据:
out <- list(structure(list(Pos = c(0L, 70557L, 104076L, 163349L, 258229L, 356613L), LRTD = c(0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6")), structure(list(Pos = c(0L, 171603L, 268756L, 456513L, 594904L, 663581L), LRTD = c(0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6")), structure(list(Pos = c(0L, 171960L, 217096L, 254484L, 320866L, 432642L), LRTD = c(0, 0.37, 0.358, 0.338, 0.366, 0.382)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6")), structure(list(Pos = c(0L, 185161L, 234971L, 273218L, 319689L, 379800L), LRTD = c(0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6")))

关于r - 如何将列 append 到列表中的 data.frames,其中该列应包含这些 data.frames 的计算读出结构信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68461372/

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