【问题标题】:r combine two dataframes not the same and with timestampsr 结合两个不同的数据帧和时间戳
【发布时间】:2018-05-11 17:05:57
【问题描述】:

我是 R 新手,并试图将一些代码从 SAS 更改为 R,但我被困在一个部分。我目前想不出一个可以代表我的问题的示例数据集。

Dataframe name1 有 5 列和 483 行。

Dataframe name2 有 27 列和超过 30000 行。

我目前在 SAS 中有这个:

 proc sql;
 create table name_c as
 select a.*, b.*
 from work.name1 a inner join work.name2 b
 on a.name = b.name
 where b.start_time <= a.p_start_time:
 quit;

我尝试使用 sqldf

   name_c <- sqldf("select a.*, b.* from name1 a inner join name2 b on
                    a.name = b.name
                    where b.start_time <= a.p_start_time")

但收到错误消息: rsqlite_send_query(conn@ptr, statement) 中的错误: 表名 2 没有名为的列 另外:警告信息: 在 field_types[]

我希望的结果将是所有列,但按 sqldf 代码中提到的时间戳过滤。

【问题讨论】:

  • 您能否提供触发此错误的示例数据?
  • 您不使用合并是否有原因?你可以比你想要的任何条件的子集。
  • subset(merge(name1, name2, by="name"), start_time &lt;= p_start_time)
  • @Parfait 有效,还有 Peter_Evan 的帖子。谢谢!

标签: r dataframe sqldf


【解决方案1】:

我对 SAS 很生疏,但是(据我了解)您应该能够使用 dplyr 进行 inner_join 然后过滤。下面是一个玩具示例:

 library(dplyr)

 Name <- c(1,1,1,1,2,2,2,2,3,3,3,3)
 Year <- c(2006,2007,2008,2009,2006,2007,2008,2009,2006,2007,2008,2009)
 Qtr.1 <- as.numeric(c(15,12,22,10,12,16,13,23,11,13,17,14))
 Qtr.2 <- as.numeric(c(14,32,62,40,72,26,43,53,14,53,67,17))
 Qtr.3 <- as.numeric(c(55,52,52,50,52,56,53,53,51,15,15,54))
 Qtr.4 <- as.numeric(c(65,72,52,40,52,66,63,24,51,63,57,84))
 DF <- data.frame(Name,Year,Qtr.1,Qtr.2,Qtr.3,Qtr.4)


 Name2 <- c(1,1,1,1,2,2,5,2,9,3,7,3)
 Year2 <- c(2016,2034,2008,2009,2034,2007,2008,2009,2006,2007,2008,2009)
 Qtr.1.2 <- as.numeric(c(15,12,22,10,12,16,13,23,11,13,17,14))
 Qtr.2.2 <- as.numeric(c(14,32,62,40,72,26,43,53,14,53,67,17))
 Qtr.3.2 <- as.numeric(c(55,52,52,50,52,56,53,53,51,15,15,54))
 Qtr.4.2 <- as.numeric(c(65,72,52,40,52,66,63,34,51,63,57,84))
 DF2 <- data.frame(Name2,Year2,Qtr.1.2,Qtr.2.2,Qtr.3.2,Qtr.4.2)


 #using dplyr's inner_join + filter fuctions
 x <- inner_join(DF, DF2 , by = c("Name" = "Name2"))
 x <- x %>% filter(Year <= Year2)
 x
    # A tibble: 31 x 11
   Name  Year Qtr.1 Qtr.2 Qtr.3 Qtr.4 Year2
1     1  2006    15    14    55    65  2016
.....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2021-09-05
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多