c-/r-从数据表列表中绑定,无需回收并且使用列表名称作为列名称的一部分

问题描述 投票:0回答:1

有很多帖子阐明了我的问题的各个部分,但我无法将其放在一起并需要帮助。我正在尝试绑定许多具有不同行数但相同列数和数据表列表中的名称的数据表,但是:

  1. 我确实不想想要从行数较少的表中回收行
  2. 我确实想使用列表项名称从结果表中的“边框”列创建单独的列
  3. 我不想使用列表项名称并从结果表中的所有“值”列创建单个列

这是一个小例子和来自其他帖子的各种部分解决方案:

# Create dummy list of data frames    
df1 <- data.frame(border=c(1,2,3), value=c(4,5,6))
df2 <- data.frame(border=as.factor(c("A","B")), value=c(3,5.7))
df_lst <- list(df1, df2)
names(df_lst) <- c("df1","df2")


t1 <- as.data.table(df_lst)
t2 <- DataVisualizations::CombineCols(df1, df2)
t3 <- do.call(CombineCols,as.data.table(df_lst))
t4 <- rbindlist(df_lst)

任何人都可以帮我把这个难题放在一起,这样我就可以使用列表(而不是我在现实生活示例中没有的单个数据帧)作为唯一输入来得到类似的东西......

   df1 df2 value
1:   1 NA    4
2:   2 NA    5
3:   3 NA    6
4:  NA  A   3.0
5:  NA  B   5.7

任何提示表示赞赏!

干杯, 马克

r list apply rbind cbind
1个回答
0
投票

您可以使用

mapply
使用 data.frame 的名称重命名第一列,然后使用 `dplyr::bind_rows():

df_lst |> 
  mapply(FUN = \(x, y){names(x)[1] <- y; x}, 
         x = _, y = names(df_lst), SIMPLIFY = FALSE) |> 
  dplyr::bind_rows()
© www.soinside.com 2019 - 2024. All rights reserved.