[英]Extract and organize data from subsetted lists on R
我花了最后幾天的時間嘗試使用幾種不同的信息來源自己解決它,包括 Stackoverflow 上的其他問題,但失敗了。 我是一個完整的初學者,所以這可能就是我在這方面苦苦掙扎的原因。
我在下面創建了這些虛擬數據來說明我的原始數據的樣子。
list1<-list(path = ".../folder1/folder2/Country_State_Species_Individual1.png",
matrix1 = cbind(1:3, 1:9),
matrix2 = cbind(1:3, 1:9),
matrix3 = cbind(1:3, 1:9))
list2<-list(path = ".../folder1/folder2/Country_State_Species_Individual2.png",
matrix1 = cbind(1:3, 1:9),
matrix2 = cbind(1:3, 1:9),
matrix3 = cbind(1:3, 1:9))
list3<-list(path = ".../folder1/folder2/Country_State_Species_Individual3.png",
matrix1 = cbind(1:3, 1:9),
matrix2 = cbind(1:3, 1:9),
matrix3 = cbind(1:3, 1:9))
general_list <- list(list1, list2, list3)
如您所見,它是由結構相同的小列表( list1
、 list2
、 list3
)組成的大列表( general_list
)。
我最初的目標可以分為兩個步驟:
1 – 從每個矩陣 2 中隨機抽取 6 行,並將這些輸出中的每一個保存在一個新對象中。
2 – 使用存儲在path
中的原始文件名中包含的信息重命名這些對象
我想以這種方式重命名提取的矩陣,因為我需要能夠通過文件名(國家、州,尤其是個人)中表示的變量對矩陣進行排序。 但也許可能是一種更有效/更實用的方法來做到這一點。
存儲這些新對象的最可取的方法是在新列表中?
我也很樂意收到關於如何實現我的初始目標以及如何繼續優化這些新對象的存儲的任何建議(請記住,在一切完成后,它們將用於某些分析)。
此致!
我們循環在“general_list”,提取matrix2
,然后樣品6行從數據集,創建一個新的list
(“出”)和重命名list
與basename
的“路徑”元素的
out <- lapply(general_list, function(x) {
x1 <- x$matrix2
x1[sample(nrow(x1), 6, replace = FALSE),] })
names(out) <- sapply(general_list,
function(x) tools::file_path_sans_ext(basename(x$path)))
out
#$Country_State_Species_Individual1
# [,1] [,2]
#[1,] 3 9
#[2,] 2 2
#[3,] 1 7
#[4,] 1 4
#[5,] 3 6
#[6,] 2 8
#$Country_State_Species_Individual2
# [,1] [,2]
#[1,] 3 3
#[2,] 1 7
#[3,] 3 9
#[4,] 2 2
#[5,] 3 6
#[6,] 1 1
#$Country_State_Species_Individual3
# [,1] [,2]
#[1,] 3 3
#[2,] 2 2
#[3,] 1 4
#[4,] 2 5
#[5,] 1 7
#[6,] 3 6
或者使用tidyverse
library(dplyr)
library(purrr)
out <- map(general_list, ~ .x %>%
pluck('matrix2') %>%
as.data.frame %>%
sample_n(6) %>%
as.matrix)
names(out) <- map_chr(general_list, ~
tools::file_path_sans_ext(basename(.x$path)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.