基于数据帧名称重命名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