简体   繁体   English

比较两个数据帧并在R中更改一个数据帧

[英]compare two data frame and change one data frame in R

in R i have 2 dataFrames "df1" and "df2". 在R中,我有2个dataFrames“ df1”和“ df2”。 They are as follows: 它们如下:

> df1
   date        value
1  1980-12-10       5
2  1980-12-11       5
3  1980-12-12       5
4  1980-12-13       5
5  1980-12-14       5


>df2
   date        value
1  1980-12-10       15
2  1980-12-11       2
3  1980-12-12       23
4  1980-12-13       44
5  1980-12-14       434
6  1980-12-15       242
7  1980-12-16       22
8  1980-12-17       82
9  1980-12-18       723
10 1980-12-19       72

I want to change "df2". 我想更改“ df2”。 The df2 must contains the values only if the df1 has the same date as df2. 仅当df1与df2具有相同的日期时,df2才必须包含值。 Actually i need the following output: 实际上我需要以下输出:

>df2
   date        value
1  1980-12-10       15
2  1980-12-11       2
3  1980-12-12       23
4  1980-12-13       44
5  1980-12-14       434

is it possible in R? 在R中有可能吗?

You can just use subsetting and %in% : 您可以只使用subset和%in%

df2[df2$date%in%df1$date,]
        date value
1 1980-12-10    15
2 1980-12-11     2
3 1980-12-12    23
4 1980-12-13    44
5 1980-12-14   434
# read in both data frames
df1 <-
    read.table( h = TRUE , text = "date        value
    1980-12-10       5
    1980-12-11       5
    1980-12-12       5
    1980-12-13       5
    1980-12-14       5")

df2 <-
    read.table( h = TRUE , text = "date        value
    1980-12-10       15
    1980-12-11       2
    1980-12-12       23
    1980-12-13       44
    1980-12-14       434
    1980-12-15       242
    1980-12-16       22
    1980-12-17       82
    1980-12-18       723
    1980-12-19       72")

# merge df1 and df2, only keeping the date column from df1
# but note no comma, which maintains the `class` of df1,
# allowing the merge to work appropriately
merge( df1[ 'date' ] , df2 )

# and if you wanted to overwrite df2 with the new results:
df2 <- merge( df1[ 'date' ] , df2 )

You can use sqldf , to do an SQL INNER JOIN( R merge), for example: 您可以使用sqldf来执行SQL INNER JOIN(R merge),例如:

library(sqldf)
sqldf('SELECT df2.*
       FROM df2
       INNER JOIN df1
       ON df1.date = df2.date')
        date value
1 1980-12-10    15
2 1980-12-11     2
3 1980-12-12    23
4 1980-12-13    44
5 1980-12-14   434

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM