R语言 如果元素长度相同,则按列合并列表中具有相同名称的元素

j7dteeu8  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(150)

我有这样的数据:

a<-rnorm(10, 1,1) 
b<-letters[1:10] 
ab<-cbind.data.frame(a,b)
ab

a<-rnorm(10, 1,1) 
b<-letters[1:10] 
cd<-cbind.data.frame(a,b)

list1<-list(ab,cd)
list1

### list1 done, making list with the same element names but slightly different

a<-rnorm(11, 1,1)   ###
b<-letters[1:11]    ### notice different length 
ab<-cbind.data.frame(a,b)
ab

a<-rnorm(10, 1,1) 
b<-letters[10:1]    ### notice reverse order 
cd<-cbind.data.frame(a,b)

list2<-list(ab,cd)
list1
list2

有两个列表,它们都有两个同名的 Dataframe ,但是dfs的维度不同,我想按列合并这些 Dataframe (在这种情况下是B)如果 Dataframe 的长度相同并且以3. dfs的列表结束。如果长度不相同,我想得到一个列表(或矢量)与df的名称,其中有不同的尺寸。任何帮助是赞赏。

bvhaajcl

bvhaajcl1#

可以先使用循环,然后使用条件语句来合并数据框,或将其名称添加到不同长度的数据框列表中。

diff_lengths <- list()

# loop through each data frame in list1 and list2
for(i in 1:length(list1)){
  
  # check the dimensions of the current data frame
  dim1 <- dim(list1[[i]])
  dim2 <- dim(list2[[i]])
  
  # if the dimensions are the same, merge the data frames
  if(dim1[1] == dim2[1]){
    merged_df <- merge(list1[[i]], list2[[i]], by = "b")
    print(merged_df)
    
  # if the dimensions are different, add the data frame name to the list of different lengths
  } else {
    diff_lengths[[i]] <- names(list1)[i]
  }
}

# print the list of data frames with different lengths
if(length(diff_lengths) > 0){
  cat("The following data frames have different lengths:\n")
  print(diff_lengths)
} else {
  cat("All data frames have the same length.")
}
dgtucam1

dgtucam12#

加入也许会有帮助吗?

library(purrr)
library(dplyr)
map2(list1, list2, function(x,y) {
  nrow_x = nrow(x)
  nrow_y = nrow(y)
  
  if(nrow_x == nrow_y) {
    full_join(x,y, by = "b", suffix = c("_list1","_list2"))
  } else {
   tibble(first_list_rows = nrow_x,
          second_list_rows = nrow_y) 
  }
}
)

输出

[[1]]
# A tibble: 1 × 2
  first_list_rows second_list_rows
            <int>            <int>
1              10               11

[[2]]
      a_list1 b    a_list2
1  -0.2133790 a  0.4248341
2   1.2334330 b  1.2870772
3   1.9252537 c -0.2991146
4   0.2112831 d  2.2372430
5  -0.4023266 e  1.1199779
6   1.7988206 f  0.4476310
7   1.2818806 g  0.9680782
8   1.1881868 h  1.5677390
9   1.5455405 i  0.9660722
10  1.7650386 j  0.4987172

相关问题