R 如何筛选列表列的元素
我有一个包含3个变量的数据帧(df):R 如何筛选列表列的元素,r,list,filter,purrr,R,List,Filter,Purrr,我有一个包含3个变量的数据帧(df): ID(第一个ID变量) ID2(第二个id变量) 使用tidyr::nest()函数创建的数据(列表)列 library(tidyverse) library(lubridate) dates <- ymd(c('2018-02-01', '2018-02-06', '2018-02-10', '2018-02-21', '2018-04-05')) df.1 <- tibble(ID = paste0('I
- ID(第一个ID变量)
- ID2(第二个id变量)
- 使用tidyr::nest()函数创建的数据(列表)列
library(tidyverse) library(lubridate) dates <- ymd(c('2018-02-01', '2018-02-06', '2018-02-10', '2018-02-21', '2018-04-05')) df.1 <- tibble(ID = paste0('ID_', rep(1, 5)), ID2 = LETTERS[1:5], DATE = dates) %>% group_by(ID) %>% nest() df.2 <- tibble(ID = paste0('ID_', rep(1, 6)), ID2 = LETTERS[1:6]) df <- df.1 %>% left_join(df.2, by = 'ID')
库(tidyverse) 图书馆(lubridate) 日期% nest()
df.2我们可以使用
。我们将列表列(map2
)作为data
参数,将.x
作为df$ID2
参数,并对每个.y
中的.x
进行过滤:.x$ID2!=.y
library(tidyverse) output <- df %>% mutate(data = data %>% map2(ID2, ~ filter(.x, ID2 != .y)))
输出:库(tidyverse) 产量% 变异(data=data%>%map2(ID2,~filter(.x,ID2!=.y)))
> output # A tibble: 6 x 3 ID data ID2 <chr> <list> <chr> 1 ID_1 <tibble [4 x 2]> A 2 ID_1 <tibble [4 x 2]> B 3 ID_1 <tibble [4 x 2]> C 4 ID_1 <tibble [4 x 2]> D 5 ID_1 <tibble [4 x 2]> E 6 ID_1 <tibble [5 x 2]> F > output %>% + pull(data) [[1]] # A tibble: 4 x 2 ID2 DATE <chr> <date> 1 B 2018-02-06 2 C 2018-02-10 3 D 2018-02-21 4 E 2018-04-05 [[2]] # A tibble: 4 x 2 ID2 DATE <chr> <date> 1 A 2018-02-01 2 C 2018-02-10 3 D 2018-02-21 4 E 2018-04-05 [[3]] # A tibble: 4 x 2 ID2 DATE <chr> <date> 1 A 2018-02-01 2 B 2018-02-06 3 D 2018-02-21 4 E 2018-04-05 [[4]] # A tibble: 4 x 2 ID2 DATE <chr> <date> 1 A 2018-02-01 2 B 2018-02-06 3 C 2018-02-10 4 E 2018-04-05 [[5]] # A tibble: 4 x 2 ID2 DATE <chr> <date> 1 A 2018-02-01 2 B 2018-02-06 3 C 2018-02-10 4 D 2018-02-21 [[6]] # A tibble: 5 x 2 ID2 DATE <chr> <date> 1 A 2018-02-01 2 B 2018-02-06 3 C 2018-02-10 4 D 2018-02-21 5 E 2018-04-05
当你说>输出 #一个tibble:6x3 ID数据ID2 1 ID_1 A 2 ID_1 B 3 ID_1 C 4id_1d 5 ID_1 E 6 ID_1 F >输出%>% +拉动(数据) [[1]] #一个tibble:4x2 ID2日期 1B 2018-02-06 2 C 2018-02-10 2018年2月21日第3天 4E 2018-04-05 [[2]] #一个tibble:4x2 ID2日期 1A 2018-02-01 2 C 2018-02-10 2018年2月21日第3天 4E 2018-04-05 [[3]] #一个tibble:4x2 ID2日期 1A 2018-02-01 2b 2018-02-06 2018年2月21日第3天 4E 2018-04-05 [[4]] #一个tibble:4x2 ID2日期 1A 2018-02-01 2b 2018-02-06 3 C 2018-02-10 4E 2018-04-05 [[5]] #一个tibble:4x2 ID2日期 1A 2018-02-01 2b 2018-02-06 3 C 2018-02-10 4D 2018-02-21 [[6]] #一个tibble:5x2 ID2日期 1A 2018-02-01 2b 2018-02-06 3 C 2018-02-10 4D 2018-02-21 5 E 2018-04-05
这是否意味着data[[ID2]]时,你可以使用
!=df$ID2map
的第一个元素可以在data[[ID2]]
中的任何地方?第二个、第三个等都可以使用df$ID2
@RuiBarradas关于你的问题OP应该说最后一句话,但那样所有的数据都会被过滤掉。你应该更具体地了解所需的输出,但类似于下面的内容,过滤掉嵌套列中有map(函数(x,y){!x[[ID2]%y[[ID2]},df$data,list(df))
“A”作为
的行:ID2
很漂亮。我试着把它弄对,但走的是df%>%mutate(filtered=map(data,~filter(,ID2!=“A”))
路线。unlist()