如何删除“bind_rows”引入的data.frame中的冗余列?

如何删除“bind_rows”引入的data.frame中的冗余列?,r,dataframe,R,Dataframe,我在列表中有两个data.frame,它们具有不同的列,我打算将它们合并到一个data.frame列表中,并且我使用了SO中的现有解决方案。是的,dplyr函数工作得很好,但是bind_rows引入了拆分所需的额外列。但是,我希望在拆分单个data.frame后继续管道,以便同时删除每个data.frame中的冗余列。我尝试使用select来取消该列,但不起作用。是否可以继续我的管道来删除列,而不是使用另一个lappy来执行此操作?我怎样才能做到这一点?有什么想法吗 这是我需要合并然后拆分的da

我在列表中有两个data.frame,它们具有不同的列,我打算将它们合并到一个data.frame列表中,并且我使用了
SO
中的现有解决方案。是的,
dplyr
函数工作得很好,但是
bind_rows
引入了拆分所需的额外列。但是,我希望在拆分单个data.frame后继续管道,以便同时删除每个data.frame中的冗余列。我尝试使用
select
来取消该列,但不起作用。是否可以继续我的管道来删除列,而不是使用另一个
lappy
来执行此操作?我怎样才能做到这一点?有什么想法吗

这是我需要合并然后拆分的data.frame列表:

DF <- list(
    hue = data.frame( begin=seq(1, by=6, len=10), end=seq(4, by=6, len=10), val=sample(30, 10)),
    ack = data.frame( begin=seq(3, by=9, len=8), end=seq(6, by=9, len=8), val=sample(45, 8)),
    ken = data.frame( begin=seq(6, by=8, len=6), end=seq(11, by=8, len=6), val=sample(52, 6))
)

MF <- list(
    hue = data.frame( begin=seq(11, by=6, len=7), end=seq(14, by=6, len=7), 
                      val=sample(30, 7), cmb.val=sample(24, 7)),
    ack = data.frame( begin=seq(13, by=9, len=5), end=seq(6, by=9, len=5), 
                      val=sample(45, 5), cmb.val=sample(18, 5)),
    ken = data.frame( begin=seq(16, by=8, len=6), end=seq(21, by=8, len=6), 
                      val=sample(52, 6), cmb.val=sample(20, 6))
)

DF我们可以使用
map

library(purrr)
bind_rows(DF, MF, .id = "GRP") %>% 
        mutate(cmb.val = ifelse(is.na(cmb.val),0,cmb.val)) %>%
        split(.$GRP) %>%
        map(~.[setdiff(names(.), "GRP")])
        #or with `select`
        #map(~select(., -one_of("GRP")))

我们可以使用
map

library(purrr)
bind_rows(DF, MF, .id = "GRP") %>% 
        mutate(cmb.val = ifelse(is.na(cmb.val),0,cmb.val)) %>%
        split(.$GRP) %>%
        map(~.[setdiff(names(.), "GRP")])
        #or with `select`
        #map(~select(., -one_of("GRP")))

您可以将
lappy()
select()
组合,如下所示:

bind_rows(DF, MF, .id = "GRP") %>% 
    mutate(cmb.val = ifelse(is.na(cmb.val), 0, cmb.val)) %>%
    split(.$GRP) %>%
    lapply(select, -GRP)

您可以将
lappy()
select()
组合,如下所示:

bind_rows(DF, MF, .id = "GRP") %>% 
    mutate(cmb.val = ifelse(is.na(cmb.val), 0, cmb.val)) %>%
    split(.$GRP) %>%
    lapply(select, -GRP)

只需添加
%%>%lappy(选择,-GRP)
?只需添加
%%>%lappy(选择,-GRP)
?亲爱的akrun,谢谢你的绝妙创意。我们是否可以使用
dplyr
函数代替
purrr
?在这种情况下,不需要依赖另一个包。感谢you@Dan它与
tidyverse
包列表一起提供。因此,如果您安装tidyverse,您将安装所有这些packages@Dan正如我在评论中提到的,您可以检查亲爱的akrun,是的,使用
tidyverse
使软件包安装更容易。谢谢亲爱的akrun,谢谢你的好主意。我们是否可以使用
dplyr
函数代替
purrr
?在这种情况下,不需要依赖另一个包。感谢you@Dan它与
tidyverse
包列表一起提供。因此,如果您安装tidyverse,您将安装所有这些packages@Dan正如我在评论中提到的,您可以检查亲爱的akrun,是的,使用
tidyverse
使软件包安装更容易。非常感谢。