基于数据帧名称重命名R中的列

基于数据帧名称重命名R中的列,r,dataframe,data-binding,merge,dplyr,tidyverse,R,Dataframe,Data Binding,Merge,Dplyr,Tidyverse,我有多个具有相同列名的数据帧。我想合并它们,但根据数据帧的名称重命名列 当前状态: Dataframe1: Date Price 12/1/1990 10.00 12/2/1990 11.00 12/3/1990 12.00 Dataframe2: Date Price 12/1/1990 11.00 12/2/1990 12.00 12/3/1990 14.00 所需状态: Date

我有多个具有相同列名的数据帧。我想合并它们,但根据数据帧的名称重命名列

当前状态:

Dataframe1:

Date          Price
12/1/1990     10.00
12/2/1990     11.00
12/3/1990     12.00

Dataframe2:

Date          Price
12/1/1990     11.00
12/2/1990     12.00
12/3/1990     14.00
所需状态:

Date          DataFrame1Price   DataFrame2Price
12/1/1990     10.00             11.00
12/2/1990     11.00             12.00
12/3/1990     12.00             14.00
解决问题的一种方法是使用表示源数据帧的id绑定长格式的行,然后根据需要使用
spread
切换到宽格式

library(tidyr)
library(dplyr)
library(lubridate)

df1 <- data.frame(
  Date = c('12/1/1990' , '12/2/1990' , '12/3/1990'),
  Price = c(10, 11, 12)
)

df2 <- data.frame(
  Date = c('12/1/1990' , '12/2/1990' , '12/3/1990'),
  Price = c(11, 12, 14)
)

df <- bind_rows(df1 = df1, df2 = df2, .id = "source") %>%
  as_tibble %>%
  transmute(
    source,
    date = mdy(Date),
    price = Price
  )

df

# # A tibble: 6 x 3
#   source date       price
#   <chr>  <date>     <dbl>
# 1 df1    1990-12-01  10.0
# 2 df1    1990-12-02  11.0
# 3 df1    1990-12-03  12.0
# 4 df2    1990-12-01  11.0
# 5 df2    1990-12-02  12.0
# 6 df2    1990-12-03  14.0

df %>% spread(source, price)

# # A tibble: 3 x 3
#   date         df1   df2
#   <date>     <dbl> <dbl>
# 1 1990-12-01  10.0  11.0
# 2 1990-12-02  11.0  12.0
# 3 1990-12-03  12.0  14.0
library(tidyr)
图书馆(dplyr)
图书馆(lubridate)
df1%差价(来源、价格)
##tibble:3 x 3
#日期df1 df2
#         
# 1 1990-12-01  10.0  11.0
# 2 1990-12-02  11.0  12.0
# 3 1990-12-03  12.0  14.0

您必须将任务划分为更小的可行任务。首先,合并dataframe,然后重命名列。1.2.
> # install.packages(c("tidyverse"), dependencies = TRUE)
library(dplyr)

Dataframe2 %>% 
       full_join(Dataframe2, 
               by = c("Date"), suffix = c(".Dataframe2", ".Dataframe2"))
> #        Date Price.Dataframe2 Price.Dataframe2.Dataframe2
> # 1 12/1/1990               11                          11
> # 2 12/2/1990               12                          12
> # 3 12/3/1990               14                          14
library(tidyr)
library(dplyr)
library(lubridate)

df1 <- data.frame(
  Date = c('12/1/1990' , '12/2/1990' , '12/3/1990'),
  Price = c(10, 11, 12)
)

df2 <- data.frame(
  Date = c('12/1/1990' , '12/2/1990' , '12/3/1990'),
  Price = c(11, 12, 14)
)

df <- bind_rows(df1 = df1, df2 = df2, .id = "source") %>%
  as_tibble %>%
  transmute(
    source,
    date = mdy(Date),
    price = Price
  )

df

# # A tibble: 6 x 3
#   source date       price
#   <chr>  <date>     <dbl>
# 1 df1    1990-12-01  10.0
# 2 df1    1990-12-02  11.0
# 3 df1    1990-12-03  12.0
# 4 df2    1990-12-01  11.0
# 5 df2    1990-12-02  12.0
# 6 df2    1990-12-03  14.0

df %>% spread(source, price)

# # A tibble: 3 x 3
#   date         df1   df2
#   <date>     <dbl> <dbl>
# 1 1990-12-01  10.0  11.0
# 2 1990-12-02  11.0  12.0
# 3 1990-12-03  12.0  14.0