【发布时间】:2021-03-29 11:37:53
【问题描述】:
我的数据框“fsp”为 1702551 obs 和 3 个变量。它看起来像这样:
tibble [1,702,551 x 3]
$ date : Date[1:1702551], format: "2011-04-12" "2011-04-12" "2011-04-12" ...
$ wavelength : num [1:1702551] 350 351 352 353 354 355 356 357 358 359 ...
$ ID : chr [1:1702551] "c01" "c01" "c01" "c01" ...
数据的快速解释:对于每个“日期”和“ID”,我在整个波长区间(350 到 2300nm)都有一个光谱数据(未显示)。 我想创建一个新列“target_ID”,其中包含一系列重复数字,每次日期或 ID 更改时,这些数字都会增加到下一个连续数字。 例如,对于第一个 ID,“c01”和日期“2011-04-12”,我将有一列编号为 1,从波长 350 到 2300。下一个 ID 的编号为 2,依此类推(沿着数据帧“日期”也会改变)
我想要实现的示例(查看“target_ID”):
|date |wavelength|ID |target_ID|
|:---------|:---------|:---|:--------|
|2011-04-12|350 |c01 |1 |
|2011-04-12|351 |c01 |1 |
|2011-04-12|352 |c01 |1 |
|2011-04-12|353 |c01 |1 |
|...…………………|...……………….|....|...…………….|
|2011-04-12|350 |c03 |2 |
|2011-04-12|351 |c03 |2 |
|...……………..|...……………….|....|...………………|
|2011-04-13|350 |c01 |3 |
|2011-04-13|351 |c01 |3 |
这是我已经尝试过但没有成功的代码:
fsp<-fsp %>%
group_by(date, ID) %>%
mutate(target_ID, count=n())
任何帮助将不胜感激。
提前谢谢你。
【问题讨论】:
-
您应该包含至少一部分数据框的代码。类似于 dput(fsp, 10) 的输出。如果您清楚地说明所需的输出并显示示例,它也会更容易为您提供帮助。正如您所写,我不确定您是否只想对这个新列使用 1:nrow(fsp) 之类的整数序列,还是希望对每组“ID”使用 1:nrow()。
-
好吧,输出 dput 会有点乱,因为数据结构是相同的 1950 per 1950 obs。我想要的是一个带有数字序列的新列“target_ID”,每个“ID”和“日期”都是 1:nrow()。由于每个 ID 和日期都有 1950 obs。我想要 1950 obs 的数字“1”,下一个 1950 obs 的数字 2。等等。 “ID”和“日期”必须包含在代码中,因为有时我对不同的“ID”有相同的“日期”。
-
@PKumar 这给了我一个贯穿所有数据点的数字序列。我想要的是基于日期和 ID 的数字序列。类似“开头的第一个日期和 ID 为 1,当日期或 ID 更改时变为数字 2 以此类推……”这样的命令