在r中将两个不同列表的数据帧合并为一个数据帧列表

在r中将两个不同列表的数据帧合并为一个数据帧列表,r,dataframe,R,Dataframe,我有两个数据帧列表:列表1和列表2。下面是来自列表1(df1)和列表2(df2)的示例数据帧: 我想将这两个列表合并到一个新的数据帧列表中,并删除所有rown is all dataframes,其中rowname称为“Mean”:list3 然后我想融化列表中的数据,使新列表中的数据帧有4列 第一列为源,如果原始列表列表1和列表2的行名为“Sample1”到“Sample10”,则源表示样本,如果行名为“基线”,则源表示基线,如果行名为“AASHTO”,则源也表示AASHTO 第二列是Type

我有两个数据帧列表:列表1和列表2。下面是来自列表1(df1)和列表2(df2)的示例数据帧:

我想将这两个列表合并到一个新的数据帧列表中,并删除所有rown is all dataframes,其中rowname称为“Mean”:list3

然后我想融化列表中的数据,使新列表中的数据帧有4列

第一列为源,如果原始列表列表1和列表2的行名为“Sample1”到“Sample10”,则源表示样本,如果行名为“基线”,则源表示基线,如果行名为“AASHTO”,则源也表示AASHTO

第二列是Type,并提取列名的末尾(从开头删除“Moment.”和“Shear.”,从结尾删除“.lane”)

第三列是力矩,包括list1的值

第四列是剪切,包括列表1的值

最终列表3中的预期示例数据帧(df3)为:

> print(df2)
     Source        Type           Shear          Moment
1   Baseline     ext_multi      0.5367121      0.5874249
2   Baseline     ext_single     0.5367121      0.5874249    
3   Baseline     int_multi      0.5367121      0.5874249
4   Baseline     int_single     0.5367121      0.5874249
5   AASHTO       ext_multi      0.5367121      0.5874249
6   AASHTO       ext_single     0.5367121      0.5874249    
7   AASHTO       int_multi      0.5367121      0.5874249
8   AASHTO       int_single     0.5367121      0.5874249
9   AASHTO       int_single     0.5367121      0.5874249
5   Sample       ext_multi      0.5367121      0.5874249
6   Sample       ext_single     0.5367121      0.5874249    
7   Sample       int_multi      0.5367121      0.5874249
8   Sample       int_single     0.5367121      0.5874249
9   Sample       int_single     0.5367121      0.5874249
... continues 

我们可以使用
pivot\u longer
列表
元素中重塑为“long”格式,然后使用
map2
在两个
列表
的相应元素上循环并进行连接

lst1new <-  map(lst1, ~
              .x %>% 
                 rownames_to_column("Source") %>% 
                 pivot_longer(cols = -Source, names_to = 'Type', 
                   values_to = 'Moment') %>% 
                 mutate(Type = str_replace(Type, '^\\w+\\.([^.]+)\\..*', '\\1')))

lst2new <-  map(lst2, ~
       .x %>% 
          rownames_to_column("Source") %>% 
          pivot_longer(cols = -Source, names_to = 'Type',
                values_to = 'Shear') %>%
          mutate(Type = str_replace(Type, '^\\w+\\.([^.]+)\\..*', '\\1')))

map2(lst1new, lst2new, full_join)
#[[1]]
# A tibble: 52 x 4
#   Source   Type       Moment Shear
# * <chr>    <chr>       <dbl> <dbl>
# 1 Baseline ext_multi   0.711 0.711
# 2 Baseline ext_single  0.537 0.537
# 3 Baseline int_multi   0.587 0.587
# 4 Baseline int_single  0.372 0.372
# 5 Sample1  ext_multi   0.711 0.711
# 6 Sample1  ext_single  0.537 0.537
# 7 Sample1  int_multi   0.587 0.587
# 8 Sample1  int_single  0.372 0.372
# 9 Sample2  ext_multi   0.711 0.711
#10 Sample2  ext_single  0.537 0.537
# … with 42 more rows

#[[2]]
# A tibble: 52 x 4
#   Source   Type       Moment Shear
# * <chr>    <chr>       <dbl> <dbl>
# 1 Baseline ext_multi   0.711 0.711
# 2 Baseline ext_single  0.537 0.537
# 3 Baseline int_multi   0.587 0.587
# 4 Baseline int_single  0.372 0.372
# 5 Sample1  ext_multi   0.711 0.711
# 6 Sample1  ext_single  0.537 0.537
# 7 Sample1  int_multi   0.587 0.587
# 8 Sample1  int_single  0.372 0.372
# 9 Sample2  ext_multi   0.711 0.711
#10 Sample2  ext_single  0.537 0.537
# … with 42 more rows
数据
lst1
data.table
库(data.table)
合并(
melt(df1,id.vars=“Source”,
度量=模式(m=“^Moment.*”),value.name=“Moment”,variable.name=“Type”,
variable.factor=FALSE,value.factor=FALSE)[类型:=gsub(“^Moment\\.(.*)\\.lane”,“\\1”,类型)],
melt(df2,id.vars=“Source”,
测量=图案(m=“^Shear.*”),value.name=“Shear”,variable.name=“Type”,
variable.factor=FALSE,value.factor=FALSE)[类型:=gsub(“^Shear\\.(.*)\\.lane”,“\\1”,类型)],
by=c(“来源”、“类型”)
)
#源型力矩剪力
#1:AASHTO ext_multi 0.7550000 0.7550000
#2:AASHTO ext_single NA
#3:AASHTO int_multi 0.6640000 0.6640000
#4:AASHTO int_单体0.4310000 0.4310000
#5:基线分机0.7109148 0.7109148
#6:基线分机单台0.5367121 0.5367121
#7:基线国际单位0.5874249 0.5874249
#8:基线国际单项0.3718993 0.3718993
#9:平均分机倍数0.7109148 0.7109148
#10:平均外部单体0.5367121 0.5367121
#11:平均整数倍数0.5874249 0.5874249
#12:平均国际单项0.3718993 0.3718993
#13:Sample1 ext_multi 0.7109148 0.7109148
#14:Sample1 ext_single 0.5367121 0.5367121
#15:Sample1 int_multi 0.5874249 0.5874249
#16:Sample1 int_single 0.3718993 0.3718993
#17:样本10 ext_multi 0.7109148 0.7109148
#18:样本10外部单体0.5367121 0.5367121
#19:Sample10 int_multi 0.5874249 0.5874249
#20:Sample10 int_single 0.3718993 0.3718993
#21:Sample2 ext_multi 0.7109148 0.7109148
#22:Sample2 ext_single 0.5367121 0.5367121
#23:Sample2 int_multi 0.5874249 0.5874249
#24:Sample2 int_single 0.3718993 0.3718993
#25:Sample3 ext_multi 0.7109148 0.7109148
#26:样本3外部单体0.5367121 0.5367121
#27:Sample3 int_multi 0.5874249 0.5874249
#28:Sample3 int_single 0.3718993 0.3718993
#29:Sample4 ext_multi 0.7109148 0.7109148
#30:Sample4 ext_single 0.5367121 0.5367121
#31:Sample4 int_multi 0.5874249 0.5874249
#32:Sample4 int_single 0.3718993 0.3718993
#33:Sample5 ext_multi 0.7109148 0.7109148
#34:样本5外部单体0.5367121 0.5367121
#35:Sample5 int_multi 0.5874249 0.5874249
#36:Sample5 int_single 0.3718993 0.3718993
#37:Sample6 ext_multi 0.7109148 0.7109148
#38:样本6外部单体0.5367121 0.5367121
#39:Sample6 int_multi 0.5874249 0.5874249
#40:Sample6 int_single 0.3718993 0.3718993
#41:Sample7 ext_multi 0.7109148 0.7109148
#42:样本7外部单体0.5367121 0.5367121
#43:Sample7 int_multi 0.5874249 0.5874249
#44:Sample7 int_single 0.3718993 0.3718993
#45:Sample8 ext_multi 0.7109148 0.7109148
#46:样本8外部单体0.5367121 0.5367121
#47:Sample8 int_multi 0.5874249 0.5874249
#48:Sample8 int_single 0.3718993 0.3718993
#49:Sample9 ext_multi 0.7109148 0.7109148
#50:Sample9 ext_single 0.5367121 0.5367121
#51:Sample9 int_multi 0.5874249 0.5874249
#52:Sample9 int_single 0.3718993 0.3718993
#源型力矩剪力

资料
df1非常感谢您,有没有办法让所有样本的源代码不考虑样本的编号?因此,不使用Sample1、Sample2、Sample3,而是将Sample放在Source列下的新列表中。
lst1new <-  map(lst1, ~
              .x %>% 
                 rownames_to_column("Source") %>% 
                 pivot_longer(cols = -Source, names_to = 'Type', 
                   values_to = 'Moment') %>% 
                 mutate(Type = str_replace(Type, '^\\w+\\.([^.]+)\\..*', '\\1')))

lst2new <-  map(lst2, ~
       .x %>% 
          rownames_to_column("Source") %>% 
          pivot_longer(cols = -Source, names_to = 'Type',
                values_to = 'Shear') %>%
          mutate(Type = str_replace(Type, '^\\w+\\.([^.]+)\\..*', '\\1')))

map2(lst1new, lst2new, full_join)
#[[1]]
# A tibble: 52 x 4
#   Source   Type       Moment Shear
# * <chr>    <chr>       <dbl> <dbl>
# 1 Baseline ext_multi   0.711 0.711
# 2 Baseline ext_single  0.537 0.537
# 3 Baseline int_multi   0.587 0.587
# 4 Baseline int_single  0.372 0.372
# 5 Sample1  ext_multi   0.711 0.711
# 6 Sample1  ext_single  0.537 0.537
# 7 Sample1  int_multi   0.587 0.587
# 8 Sample1  int_single  0.372 0.372
# 9 Sample2  ext_multi   0.711 0.711
#10 Sample2  ext_single  0.537 0.537
# … with 42 more rows

#[[2]]
# A tibble: 52 x 4
#   Source   Type       Moment Shear
# * <chr>    <chr>       <dbl> <dbl>
# 1 Baseline ext_multi   0.711 0.711
# 2 Baseline ext_single  0.537 0.537
# 3 Baseline int_multi   0.587 0.587
# 4 Baseline int_single  0.372 0.372
# 5 Sample1  ext_multi   0.711 0.711
# 6 Sample1  ext_single  0.537 0.537
# 7 Sample1  int_multi   0.587 0.587
# 8 Sample1  int_single  0.372 0.372
# 9 Sample2  ext_multi   0.711 0.711
#10 Sample2  ext_single  0.537 0.537
# … with 42 more rows
map2(lst1new, lst2new, ~ full_join(.x, .y) %>%
                         mutate(Source = str_remove(Source, "\\d+$")))
lst1 <- list(structure(list(Moment.ext_multi.lane = c(0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.755, 0.7109148), Moment.ext_single.lane = c(0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, NA, 0.5367121), Moment.int_multi.lane = c(0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.664, 0.5874249), 
    Moment.int_single.lane = c(0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.431, 0.3718993)), class = "data.frame", row.names = c("Baseline", 
"Sample1", "Sample2", "Sample3", "Sample4", "Sample5", "Sample6", 
"Sample7", "Sample8", "Sample9", "Sample10", "AASHTO", "Mean"
)), structure(list(Moment.ext_multi.lane = c(0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.755, 0.7109148), Moment.ext_single.lane = c(0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, NA, 0.5367121), Moment.int_multi.lane = c(0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.664, 0.5874249), 
    Moment.int_single.lane = c(0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.431, 0.3718993)), class = "data.frame", row.names = c("Baseline", 
"Sample1", "Sample2", "Sample3", "Sample4", "Sample5", "Sample6", 
"Sample7", "Sample8", "Sample9", "Sample10", "AASHTO", "Mean"
)))

lst2 <- list(structure(list(Shear.ext_multi.lane = c(0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.755, 0.7109148), Shear.ext_single.lane = c(0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, NA, 0.5367121), Shear.int_multi.lane = c(0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.664, 0.5874249), 
    Shear.int_single.lane = c(0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.431, 0.3718993)), class = "data.frame", row.names = c("Baseline", 
"Sample1", "Sample2", "Sample3", "Sample4", "Sample5", "Sample6", 
"Sample7", "Sample8", "Sample9", "Sample10", "AASHTO", "Mean"
)), structure(list(Shear.ext_multi.lane = c(0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 0.7109148, 
0.7109148, 0.7109148, 0.7109148, 0.755, 0.7109148), Shear.ext_single.lane = c(0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 0.5367121, 
0.5367121, 0.5367121, 0.5367121, 0.5367121, NA, 0.5367121), Shear.int_multi.lane = c(0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.5874249, 
0.5874249, 0.5874249, 0.5874249, 0.5874249, 0.664, 0.5874249), 
    Shear.int_single.lane = c(0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 0.3718993, 
    0.3718993, 0.3718993, 0.431, 0.3718993)), class = "data.frame", row.names = c("Baseline", 
"Sample1", "Sample2", "Sample3", "Sample4", "Sample5", "Sample6", 
"Sample7", "Sample8", "Sample9", "Sample10", "AASHTO", "Mean"
)))