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

按R中的行名组合不同长度的数据帧列表

艾英范
2023-03-14

我有一个不同长度的数据帧列表(df),按年份索引,数据的代理如下所示:

df

  $df1          
         X..i..
  1999     10
  1998     13 
  1997     14

 $df2
         X..i..
 1999      20
 1998      11

 $df3
         X..i..
 1999      17
 1998       8
 1997       9
 1996      19
df_all
 Index     df1   df2   df3
  1999      10    20    17
  1998      13    11     8
  1997      14    n/a    9
  1996      n/a   n/a   19
smalldflist <- lapply(bai_df, function(i) head(i, 10))
dput(smalldflist)

共有1个答案

闾丘鸣
2023-03-14

如果您只在全局环境中拥有所需的数据,您可以尝试以下操作。首先,您收集所有数据帧中的唯一年份,并创建一个主数据帧,其中只包括唯一年份。然后,您将所有数据帧放在一个列表中,并将每个数据帧与master合并。因为您在temp中有主数据帧,所以您将其删除。最后,您绑定所有数据帧,并将长格式更改为宽格式。

library(tidyverse)

# Create a data frame with all unique years

master <- data.frame(year = mget(ls()) %>%
                            sapply(`[`, 1) %>%
                            as_vector %>% 
                            unique)

# Merge each data frame with the master df
temp <- mget(ls()) %>%
        lapply(function(x){full_join(x, master, by = "year")})

# Remove the master df in the list
temp[["master"]] <- NULL

# Bind all dfs and make it wide.
bind_rows(temp, .id = "data") %>%
spread(key = data, value = value)

#  year df1 df2 df3
#1 1996  NA  NA  19
#2 1997  14  NA   9
#3 1998  13  11   8
#4 1999  10  20  17

数据

df1 <- data.frame(year = c(1999, 1998, 1997),
                  value = c(10, 13, 14))

df2 <- data.frame(year = c(1999, 1998),
                  value = c(20, 11))

df3 <- data.frame(year = c(1999, 1998, 1997, 1996),
                  value = c(17, 8, 9, 19))
 类似资料:
  • 我有两个不同长度的数据帧。我想用CAP*货币和Go*货币与df_cur的乘法来改变数据帧df中的列。这应该在国家和年份必须分别对两个数据家族相同的条件下完成。更具体地说, #df# #df_cur# 所以,我想像这样变换df: #df# 我回顾了许多将两个数据帧大小不同的列相乘得到的答案,但没有任何结果。 我的代码示例: 非常感谢您的宝贵时间!

  • 我有两个具有经度和纬度值的数据帧,我想从数据帧#2中提取值(例如数据帧#2的第三列),这些值与数据帧1的列匹配...例如,数据帧1有两列(、),数据帧2有三列(、和一些值)...我想在数据帧1中添加第三列,其中的值对应于两个数据帧中两列完全匹配的值,类似于和...在、不匹配的对中,我希望添加,以便第三列(我要添加到数据。帧1)的长度为=。我尝试了merge函数,但在将的两列与的列进行匹配时遇到了困

  • 输入的dput() 结构(列表(Varname=structure(1:6,.标签=c(“A”,“B”,“c”,“D”,“E”,“F”),类=“因子”),成分=结构(c(3L,1L,1L,4L,2L,1L),标签=c(“”,“A,c”,“B”,“c”),类=“因子”),名字=结构(c(5L,3L,2L,4L,6L),标签=c(“”,“鲍勃”,“凯茜”,“迪克,南希”,“杰克,布鲁斯”,“曼迪”),

  • 假设我有以下数据帧: 我想计算每个的不同值的数量。它应产生以下结果: 我该怎么做?

  • 本文向大家介绍如何通过重复行数来增加R数据帧的长度?,包括了如何通过重复行数来增加R数据帧的长度?的使用技巧和注意事项,需要的朋友参考一下 如果我们坚信新的数据收集将产生相同类型的数据,则我们可能希望在R中将数据帧扩展为更多行。虽然不建议这样做,因为由于此过程,我们在数据中失去了公正性,但这样做是为了节省时间和金钱,而这些钱和金钱将用于投资新的数据收集。在R中,我们可以将rep与seq_len函数

  • 我试图在R中合并2个数据帧,但我有两个不同的列,带有不同类型的ID变量。有时一行会有其中一列的值,而另一列却没有。我想同时考虑它们,这样,如果一个帧缺少一个列的值,那么将使用另一个列。 我想合并这两个数据帧,得到2行: null 编辑:理想情况下,输出如下所示: 第1行匹配,因为列“first”在两个数据帧中具有相同的值,并且它填充了来自DF2的“second”的值 第2行匹配,因为列“secon