在每个内部id,我想保留至少相隔91天的行.在我的数据框中df,id=1有5行,id=2有1行.
因为id=1,我想只保留第1行,第3行和第5行.
这是因为如果我们比较第一个日期和第二个日期,它们相差32天.所以,删除第二个日期.我们继续比较第1和第3个日期,它们相差152天.所以,我们保持第3次约会.
现在,我们使用第3个日期,而不是使用第1个日期作为参考.第3个日期和第4个日期相差61天.所以,删除第4个日期.我们继续比较第3个日期和第5个日期,它们相差121天.所以,我们保持第5个约会.
最后,我们保留的日期是第1天,第3天和第5天.至于id=2,只有一行,所以我们保持这一点.期望的结果显示在dfnew.
df <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 B 2006-02-02
1 C 2006-06-02
1 D 2006-08-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
dfnew <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 C 2006-06-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
我只能想到用分组开始的df通过id如下:
library(dplyr)
dfnew …Run Code Online (Sandbox Code Playgroud) 我有口服DM药物的患者处方数据,即DPP4和SU,想知道患者是否同时服用了药物(即同一患者中DPP4和SU的间隔是否重叠ID)。
样本数据:
ID DRUG START END
1 1 DPP4 2020-01-01 2020-01-20
2 1 DPP4 2020-03-01 2020-04-01
3 1 SU 2020-03-15 2020-04-30
4 2 SU 2020-10-01 2020-10-31
5 2 DPP4 2020-12-01 2020-12-31
Run Code Online (Sandbox Code Playgroud)
在上面的样本数据中,
ID == 1,患者从有DPP-4和SU同时2020-03-15给2020-04-01。ID == 2,患者以不同的时间间隔服用了两种药物。我想将数据分成 2 个,一个用于 DPP4,另一个用于 SU。然后,进行完全连接,并将每个 DPP4 间隔与每个 SU 间隔进行比较。这对于小数据可能没问题,但如果患者有 5 行 DPP4 和另外 5 行 SU,我们将有 25 次比较,这可能效率不高。加上 10000 多名患者。
我不知道该怎么做。
新数据:
希望有一个看起来像这样的新 df。或者任何整洁的东西。
ID DRUG START END
1 1 DPP4-SU 2020-03-15 2020-04-01 …Run Code Online (Sandbox Code Playgroud) 我想在 R 中应用 grep(),但我不太擅长 lapply()。我知道 lapply 能够获取一个列表,将函数应用于每个成员并输出一个列表。例如,假设x一个列表由 2 个成员组成。
> x<-strsplit(docs$Text," ")
>
> x
[[1]]
[1] "I" "lovehttp" "my" "mum." "I" "love"
[7] "my" "dad." "I" "love" "my" "brothers."
[[2]]
[1] "I" "live" "in" "Eastcoast" "now." "Job.I"
[7] "used" "to" "live" "in" "WestCoast."
Run Code Online (Sandbox Code Playgroud)
我想应用 grep() 函数来删除由 http 组成的单词。所以,我会申请:
> lapply(x,grep(pattern="http",invert=TRUE, value=TRUE))
Run Code Online (Sandbox Code Playgroud)
但它不起作用,它说
Error in grep(pattern = "http", invert = TRUE, value = TRUE) :
argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)
所以,我试过了
> lapply(x,grep(pattern="http",invert=TRUE, value=TRUE,x))
Run Code Online (Sandbox Code Playgroud)
但它说
Error …Run Code Online (Sandbox Code Playgroud) 我想为给定现有值的变量估算缺失值。在 中var2,我们注意到有很多NAs。
var2相同。var2,就像 id==2 的情况一样,那么我们只输出为NA。它应该从df_old到df_new.
df_old<- read.table(header = TRUE, text = "
id var1 var2
1 A 12
1 B NA
1 E NA
2 G NA
2 J NA
")
df_new<- read.table(header = TRUE, text = "
id var1 var2
1 A 12
1 B 12
1 E 12
2 G NA
2 J NA
")
Run Code Online (Sandbox Code Playgroud)
我试过: …
我想根据出生日期计算年龄.
如果我使用lubridate,我会按照R给定出生日期和任意日期的有效和准确的年龄计算(年,月或周)运行以下内容
as.period(new_interval(start = birthdate, end = givendate))$year
但是,当我尝试使用mutatein dplyr来创建新变量时,我遇到了一个错误.
library(dplyr); library(lubridate)
birthdate <- ymd(c(NA, "1978-12-31", "1979-01-01", "1962-12-30"))
givendate <- ymd(c(NA, "2015-12-31", "2015-12-31", NA))
df <- data.frame(
birthdate = birthdate,
givendate = givendate)
Run Code Online (Sandbox Code Playgroud)
以下工作虽然它给出了所有日期和时间值.即年,月,日,小时,分钟和秒.
df<-df %>% mutate(age=as.period(interval(start = birthdate, end = givendate)))
# df
# birthdate givendate age
# 1 <NA> <NA> <NA>
# 2 1978-12-31 2015-12-31 37y 0m 0d 0H 0M 0S
# 3 1979-01-01 2015-12-31 36y 11m 30d 0H 0M 0S
# 4 …Run Code Online (Sandbox Code Playgroud) 我有一个数据帧如下,我想结合两列,即Var1和Var2.我希望组合列(Var3)不包含重复项<alpha><digit>.也就是说,如果Var1 == A1和Var2 == A1,因此Var3 == A1而不是Var3 == A1-A1或者Var1 == A4-E9和Var2 == A4,因此,Var3 == A4-E9但不Var3 == A4-E9-A4
df <- read.table(header = TRUE, text =
"id Var1 Var2
A A1 A1
B F2 A2
C NA A3
D A4-E9 A4
E E5 A5
F NA NA
G B2-R4 A3-B2
H B3-B4 E1-G5", stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
以下是我的代码.我想改进它的可读性以及摆脱NA第3行的条目 …
我使用lubridate和dplyr包来处理日期变量并分别创建一个新的日期变量.
library(lubridate)
library(dplyr)
Run Code Online (Sandbox Code Playgroud)
让df我的数据帧.我有两个变量date1和date2.我想创建一个新变量date,使其取值date1.如果date1缺少,date2则取代值.
df <- data.frame(date1 = c("24/01/2016",NA,"22/07/2016"),
date2 = c("31/01/2016","09/02/2017",NA),
stringsAsFactors=FALSE)`
Run Code Online (Sandbox Code Playgroud)
上面的命令给出:
date1 date2
1 24/01/2016 31/01/2016
2 <NA> 09/02/2017
3 22/07/2016 <NA>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,我认为可以给我所需的结果.但是,新date变量在数字中.
df %>%
mutate_at(vars(date1,date2),dmy) %>%
mutate(date=ifelse(is.na(date1),date2,date1))
date1 date2 date
1 2016-01-24 2016-01-31 16824
2 <NA> 2017-02-09 17206
3 2016-07-22 <NA> 17004
Run Code Online (Sandbox Code Playgroud)
我想要:
date1 date2 date
1 2016-01-24 2016-01-31 2016-01-24
2 <NA> 2017-02-09 2017-02-09
3 2016-07-22 …Run Code Online (Sandbox Code Playgroud)