【问题标题】:Create new data frame from list of data frames using lapply使用 lapply 从数据框列表创建新数据框
【发布时间】:2019-08-29 11:07:04
【问题描述】:

我有一个数据框列表。每个列表包含两列“名称”和“代码”

一个

Name Code
AAA  123
BBB  456
CCC  789

B

   Name Code
   AAA  123
   AAB  124
   AAC  125

C

Name Code
BBB  456
BBA  457
BBC  458
  1. 我想创建一个包含所有唯一名称和代码的新数据框“NEW”,以便我得到

    名称代码 AAA 123 AAB 124 瑞声 125 BBB 456 工商管理硕士 457 英国广播公司 458 CCC 789

  2. 拥有“NEW”后,我想将数据框列表与“NEW”进行比较,并说明每个名称是否存在于一个列表中。 我想向“新”数据框添加新列(带有列表中数据框的名称),并输入“是”或“否”,以防万一。

所以得到这个

Name Code  A     B     C
AAA  123   YES   YES   NO
AAB  124   NO    YES   NO
AAC  125   NO    YES   NO
BBB  456   YES   NO    YES
BBA  457   No    NO    YES
BBC  458   NO    NO    YES
CCC  789   YES   NO    NO

我想使用lapply,但我不知道该怎么做。

你能帮帮我吗

【问题讨论】:

    标签: r list dataframe lapply


    【解决方案1】:

    使用 ID 绑定行,然后使用 data.table 从长到宽重塑:

    # example data
    myList <- list(A = data.frame(x = 1:3),
                   B = data.frame(x = 2:4),
                   C = data.frame(x = 4:6))
    
    library(data.table)
    
    dcast(rbindlist(myList, idcol = "ID"), x ~ ID)
    #    x  A  B  C
    # 1: 1  1 NA NA
    # 2: 2  2  2 NA
    # 3: 3  3  3 NA
    # 4: 4 NA  4  4
    # 5: 5 NA NA  5
    # 6: 6 NA NA  6
    

    【讨论】:

      【解决方案2】:

      使用基础 R,我们可以使用 Reduce 创建数据帧列表和 merge 它们一起。对于每个列表,我们检查该值是否存在于新的合并数据帧 (df_merge) 中,并根据它们的存在/不存在分配值“是”、“否”。

      list_name <- mget(c("A", "B", "C"))
      
      df_merge <- Reduce(function(x, y) merge(x, y, all = TRUE), list_name)
      df_merge[names(list_name)] <- lapply(list_name, function(x) 
                                    c("No", "Yes")[(df_merge$Name %in% x$Name + 1)])
      
      
      df_merge
      
      #  Name Code   A   B   C
      #1  AAA  123 Yes Yes  No
      #2  BBB  456 Yes  No Yes
      #3  CCC  789 Yes  No  No
      #4  AAB  124  No Yes  No
      #5  AAC  125  No Yes  No
      #6  BBA  457  No  No Yes
      #7  BBC  458  No  No Yes
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 2016-02-29
        相关资源
        最近更新 更多