【发布时间】:2021-11-06 03:16:49
【问题描述】:
我有以下数据框(df11 和 df22)我想使用 "UserID=UserID" 和日期差异 here 和 sqldf here,但我不知道如何为我的数据框实现其中任何一个。
df1 <- structure(list(UserID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L),
Full.Name = c( "John Smith", "Jack Peters", "Bob Brown", "Jane Doe", "Jackie Jane", "Sarah Brown", "Chloe Brown", "John Smith" ),
Info = c("yes", "no", "yes", "yes", "yes", "yes", "no", "yes"),
EncounterID = c(13L, 14L, 15L, 16L, 17L, 18L, 19L, 13L), DateTime = c("1/2/21 00:00", "1/5/21 12:00", "1/1/21 1:31", "1/5/21 3:34", "5/9/21 5:33", "5/8/21 3:39", "12/12/21 2:30", "12/11/21 9:21"),
Temp = c("100", "103", "104", "103", "101", "102", "103", "105"),
misc = c("(null)", "no", "(null)", "(null)", "(null)","(null)", "(null)", "(null)"
)),
class = "data.frame", row.names = c(NA,
-8L))
df2 <- structure(list(UserID = c(1L, 2L, 3L, 4L, 5L, 6L),
Full.Name = c("John Smith", "Jack Peters", "Bob Brown", "Jane Doe", "Jackie Jane", "Sarah Brown"),
DOB = c("1/1/90", "1/10/90", "1/2/90", "2/20/80", "2/2/80", "12/2/80"),
EncounterID = c(13L, 14L, 15L, 16L, 17L, 18L), EncounterDate = c("1/1/21", "1/2/21", "1/1/21", "1/6/21", "5/7/21", "5/8/21"),
Type = c("Intro", "Intro", "Intro", "Intro", "Care", "Out"),
responses = c("(null)", "no",
"yes", "no", "no", "unsat")),
class = "data.frame", row.names = c(NA,
-6L))
loadedNamespaces()
install.packages("Rcpp")
library(dplyr)
library(tidyr)
install.packages("lubridate")
library(lubridate)
df11 <-
df1 %>%
separate(DateTime, c("Date", "Time"), sep=" ") %>%
mutate(Date = as_datetime(mdy(Date))) %>%
select(-Time) %>%
as_tibble()
df22 <-
df2 %>%
mutate(across(c(EncounterDate), mdy)) %>%
mutate(across(c(EncounterDate), as_datetime)) %>%
as_tibble()
@r2evans 运行第一组代码后,我得到以下输出。这与您的略有不同。
df11 <- mutate(df11, Date_m30 = Date %m-% days(30), Date_p30 = Date %m+% days(30))
df11
# A tibble: 8 x 7
UserID Full.Name Info EncounterID Date Temp misc
<int> <chr> <chr> <int> <dttm> <chr> <chr>
1 1 John Smith yes 13 2021-01-02 00:00:00 100 (null)
2 2 Jack Peters no 14 2021-01-05 00:00:00 103 no
3 3 Bob Brown yes 15 2021-01-01 00:00:00 104 (null)
4 4 Jane Doe yes 16 2021-01-05 00:00:00 103 (null)
5 5 Jackie Jane yes 17 2021-05-09 00:00:00 101 (null)
6 6 Sarah Brown yes 18 2021-05-08 00:00:00 102 (null)
7 7 Chloe Brown no 19 2021-12-12 00:00:00 103 (null)
8 1 John Smith yes 13 2021-12-11 00:00:00 105 (null)
【问题讨论】:
-
很高兴您提供了
dput的输出,谢谢!这是一个不常见的问题。但是......将列转换为Date-class 或POSIXct-class 对象应该与您的合并问题无关。请最小化您的问题,只显示相关的代码。 (也就是说,更新列并重做dput部分。不要包括loadedNamespaces或install.packages。保留library调用。)谢谢! -
您从
sqldf或其他模糊连接尝试中尝试了什么? -
如果你
mutate添加Date_m30并且它没有出现在输出中,那么确实有一些问题。 -
我已经在 3 台机器上尝试过了,我得到了 #A tibble: 8 x 7 在每台机器上。还有其他方法吗?
-
我不知道为什么
mutate不会返回额外的列。试试df11$Date %m-% days(30)看看它是否返回你所期望的。如果是,请检查+-variant 是否也有效。如果是,则检查存储对象名称中的拼写错误,可能是df11或dfl1(较低-L与一个-1),或其他可能导致这种困境的东西。跨度>
标签: r