我有一个数据框列表:
data1 <-
data.frame(
ID = c(1, 1, 1, 1),
Name1 = c(3, 2, 3, 2),
Name2 = c(4, 5, 4, 5),
Name3 = c(6, 7, 6, 7),
Name4 = c(8, 9, 8, 9))
data2 <-
data.frame(
ID = c(2, 2, 2),
Name4 = c(7, 3, 3),
Name2 = c(3, 1, 1),
Name3 = c(2, 2, 2),
Name1 = c(1, 1, 1))
data3 <-
data.frame(
ID = c(3, 3, 3, 3, 3, 3),
Name3 = c(6, 6, 6, 6, 6, 6),
Name1 = c(2, 2, 2, 2, 2, 2),
Name4 = c(3, 3, 3, 3, 3, 3),
Name2 = c(2, 2, 2, 2, 2, 2))
data4 <-
data.frame(
ID = c(4, 4, 4, 4),
Name2 = c(5, 7, 7, 5),
Name3 = c(1, 1, 1, 1),
Name1 = c(9, 1, 9, 1),
Name4 = c(3, 3, 3, 3))
list_data <- list(data1, data2, data3, data4)
我还有一个列表,其中包含相同数量的条目,每个条目包含list_data中行位置的向量:
rows1 <- c(1, 4)
rows2 <- c(1)
rows3 <- c(1, 3, 6)
rows4 <- c(2, 3)
list_rows <- list(rows1, rows2, rows3, rows4)
如何使用list_data
中相应的行位置向量对list_rows
中的每个数据框进行子集?
答案 0 :(得分:3)
对于相应的索引,base R
方向选项为Map
Map(function(x, y) x[y, ], list_data, list_rows)
#[[1]]
# ID Name1 Name2 Name3 Name4
#1 1 3 4 6 8
#4 1 2 5 7 9
#[[2]]
# ID Name4 Name2 Name3 Name1
#1 2 7 3 2 1
#[[3]]
# ID Name3 Name1 Name4 Name2
#1 3 6 2 3 2
#3 3 6 2 3 2
#6 3 6 2 3 2
#[[4]]
# ID Name2 Name3 Name1 Name4
#2 4 7 1 1 3
#3 4 7 1 9 3
可以使用map2
purrr
进行类似的提取
library(tidyverse)
map2(list_data, list_rows, ~ .x[.y,])
或者
map2(list_data, list_rows, `[`, )
答案 1 :(得分:1)
这是使用lapply的可能解决方案:
NSPersistentContainer