gpt4 book ai didi

r - 通过 R 中的 data.table 有条件地替换组中的第一个值

转载 作者:行者123 更新时间:2023-12-01 23:31:47 25 4
gpt4 key购买 nike

我有一个很简单的问题。我有以下格式的长数据:

ID    start.date    drug.start    drug.stop
1 01/02/2002 15/03/2004 16/04/2004
1 01/02/2002 16/04/2004 15/05/2004
...
2 05/01/2001 05/01/2001 06/02/2001
....

从上面的例子中,ID 1drug.start 比他们的总体 start.date 晚了 2 年多,而 ID 2 的两个日期相同。数据中还有一些其他 ID 与 ID 1 相同。

我想做的是将每个 ID 的第一个 drug.start 更改为 start.date

我目前的尝试是:

DT[, drug.start[1]:=start, by=ID]

我收到以下错误:

Error in eval(expr, envir, enclos) : object 'drug.start' not found

我对 data.table 很陌生,不太确定如何获得我想要的内容。
提前感谢您的帮助。

最佳答案

我们可以使用行索引。我们得到每个 'ID' 的第一个值的行索引 (.I)(假设它已经排序并且列是 'character' 类),并使用此索引分配 'start .date' 值为 'drug.start'

indx <- DT[, .I[1L], by=ID]$V1
DT[indx, drug.start := start.date]
DT
# ID start.date drug.start drug.stop
#1: 1 01/02/2002 01/02/2002 16/04/2004
#2: 1 01/02/2002 16/04/2004 15/05/2004
#3: 2 05/01/2001 05/01/2001 06/02/2001
#4: 2 05/02/2001 05/03/2001 06/05/2001

数据

df1 <-  structure(list(ID = c(1L, 1L, 2L, 2L), 
start.date = c("01/02/2002",
"01/02/2002", "05/01/2001", "05/02/2001"), drug.start = c("15/03/2004",
"16/04/2004", "05/01/2001", "05/03/2001"), drug.stop = c("16/04/2004",
"15/05/2004", "06/02/2001", "06/05/2001")), .Names = c("ID",
"start.date", "drug.start", "drug.stop"), class = "data.frame",
row.names = c(NA, -4L))

DT <- as.data.table(df1)

关于r - 通过 R 中的 data.table 有条件地替换组中的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32007229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com