【发布时间】:2021-03-25 14:20:20
【问题描述】:
这个问题与我 14 天前提出的另一个问题有关。
How to conditional subset a list in R based on range in another column
这里的不同之处在于,我需要对行而不是列进行子集化,我无法做到这一点。
我已将 100 多个相等的 .xls 文件(每个文件 10 张)导入 R 中的一个列表。我现在正试图获取我需要的信息。文件中的数据高度非结构化。
我创建了一些玩具数据来展示我想要的东西。
list3 <- list(data.frame(depth = c(NA,NA,NA,1,2,3,4,5),
col1 = c(NA,NA,"black",NA,"x",NA,NA,NA),
col2 = c(NA,NA,"blue",NA,NA,"x",NA,NA),
col3 = c(NA,NA,"white","x",NA,NA,NA,NA),
col4 = c(NA,NA,"grey",NA,NA,NA,"x",NA),
col5 = c(NA,NA,"yellow",NA,NA,NA,NA,"x")))
list4 <- list(data.frame(depth = c(NA,NA,NA,1,2,3,4,5),
col1 = c(NA,NA,"black",NA,NA,"x",NA,NA),
col2 = c(NA,NA,"blue",NA,NA,NA,"x",NA),
col3 = c(NA,NA,"white","x",NA,NA,NA,NA),
col4 = c(NA,NA,"grey",NA,"x",NA,NA,NA),
col5 = c(NA,NA,"yellow",NA,NA,NA,NA,"x")))
list5 <- list(data.frame(depth = c(NA,NA,NA,1,2,3,4,5),
col1 = c(NA,NA,"black",NA,"x","x",NA,NA),
col2 = c(NA,NA,"blue",NA,NA,NA,"x",NA),
col3 = c(NA,NA,"white","x",NA,NA,NA,NA),
col4 = c(NA,NA,"grey",NA,NA,NA,NA,NA),
col5 = c(NA,NA,"yellow",NA,NA,NA,NA,"x")))
my_list <- list(list3,list4,list5)
desired_result <- data.frame(depth = c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5),
color = c("white","black","blue","grey","yellow",
"white","grey","black","blue","yellow",
"white","black","black","blue","yellow"))
正如我在上一个问题中提到的,数据是高度非结构化的,因此我需要一个基于子集范围的解决方案。
我需要遍历我的列表。到目前为止,我已经成功使用 purrr:map 做到了这一点。但这个我似乎无法弄清楚。
我需要链接我所有文件中每个深度的颜色。结果不需要在数据框中,每个深度的向量都可以。
我希望得到一个 purrr 解决方案,但谢天谢地,一切都被接受了。
【问题讨论】:
-
检查修改后的答案。这可以满足您的额外要求。