当前位置: 首页 > 知识库问答 >
问题:

如何合并列名相同的数据列表?

陈实
2023-03-14

我有以下数据

df1 <- tibble::as.tibble(list(a = c(1,2,3), d = c(10,11,12) ,id = c("a","b","c")))
df2 <- tibble::as.tibble(list(a = c(4,5,6), e = c(13,14,15) ,id = c("a","b","c")))
df3 <- tibble::as.tibble(list(a = c(7,8,9), f = c(16,17,18) ,id = c("a","b","c")))
| id | a.df1 | d  | a.df2 | e  | a.df3 | f  |
|----|-------|----|-------|----|-------|----|
| a  | 1     | 10 | 4     | 13 | 7     | 16 |
| b  | 2     | 11 | 5     | 14 | 8     | 17 |
| c  | 3     | 12 | 6     | 15 | 9     | 18 |
test_list <- list(df1, df2, df3)
names(test_list) <- c("df1", "df2", "df3")
seq_along(temp) %>% 
      purrr::reduce(
      ~merge(
      temp[[.x]], 
      temp[[.y]], 
      suffix = c(names(test_list[.x]), names(test_list[.y])))

共有1个答案

归俊杰
2023-03-14
library(tidyverse)

df1 <- tibble::as.tibble(list(a = c(1,2,3), d = c(10,11,12) ,id = c("a","b","c")))
df2 <- tibble::as.tibble(list(a = c(4,5,6), e = c(13,14,15) ,id = c("a","b","c")))
df3 <- tibble::as.tibble(list(a = c(7,8,9), f = c(16,17,18) ,id = c("a","b","c")))

# create your list and the names
test_list <- list(df1, df2, df3)
names(test_list) <- c("df1", "df2", "df3")

# spot overlapping columns
test_list %>%
  map_df(names) %>%
  gather() %>%
  count(value) %>%
  filter(n > 1 & value != "id") %>%
  pull(value) -> overlaps

map2(test_list, names(test_list), ~{names(.x)[names(.x) %in% overlaps] = paste0(names(.x)[names(.x) %in% overlaps],".",.y); .x}) %>% 
  reduce(function(x,y) left_join(x,y, by="id")) %>%
  select(id, everything())

# # A tibble: 3 x 7
#   id    a.df1     d a.df2     e a.df3     f
#   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 a         1    10     4    13     7    16
# 2 b         2    11     5    14     8    17
# 3 c         3    12     6    15     9    18

给定一个列表及其名称,我们使用MAP2更新位置1中每个元素的名称(即列a)。

然后,我们使用reduce顺序连接数据集,并使用select排列列。

 类似资料:
  • 问题内容: 我可以在其他具有相同列名的数据框的右边追加一个数据框吗 问题答案: 您可以像这样连接两个数据框。 如果您正在寻找联盟,则可以执行以下操作。 Spark 2.0,已重命名为

  • 本文向大家介绍如何在R中合并具有相同列数的矩阵?,包括了如何在R中合并具有相同列数的矩阵?的使用技巧和注意事项,需要的朋友参考一下 列数相同的矩阵可以按行合并。例如,如果我们有五个矩阵列表,每个矩阵都有六列,则可以通过合并这些矩阵的行将这些矩阵转换为单个矩阵。可以使用do.call(rbind,“ List_of_matrices_object_name”)来完成。 示例 请看以下矩阵及其列表-

  • 我有多个文本文件,我从一个文本文件中分离出来,现在我想将它们与分离的表单和列合并 数据1.txt data2.txt 数据3.txt 数据4.txt data5.txt 如何使用c将这些数据文件合并成一个逗号分隔值(csv)文件? 我看到了关于它的相关问题,但它与c无关

  • 我有两个数据。表X和表Y。 列 X: Y 中的值列: 创建两个data.tables: 我设置了 X 和 Y 的键: 现在,我尝试通过X中的< code>id和Y中的< code>ID来连接X和Y: All引发错误,指出参数中的列名无效。 我查阅了data.table的手册,发现< code>merge函数不支持< code>by.x和< code>by.y参数。 如何在不更改列名的情况下通过不同

  • 我有两个熊猫数据帧共享一个共同的列名。我想合并公共列名,但保留与第二个dataFrame中的所有不同列,其中公共列名称匹配。下面是两个数据帧的示例: 我希望预期的结果是: 也就是说,当列“A”匹配时,我希望保留I,J,K,L的行,并且不等于“NaN ”,对于DF1中的列也是如此。 我已经尝试了所有的pd.merge选项,但是它们似乎没有做我上面要求的事情。例如, 在“A”上匹配并将所有键保留在左侧

  • 输入数据集2 预期输出为 `