仅使用R中最后一个日期的值创建列

  • 本文关键字:创建 日期 最后一个 r
  • 更新时间 :
  • 英文 :


我有一个数据帧。我需要通过查找最后一天的值来创建一个新列,我可以这样做,但我只能提取这些列中所有日期的值,我想将其余日期留空。我的代码是

df %>% 
arrange(as.Date(DATE)) %>% 
group_by(cow) %>% 
mutate(last = last(VALUE))->df

请在这里查看我的数据帧

| DATE| cow| value|
|:---- |:------:| -----:|
| 2010-01-01 | public   | 54|
| 2019-01-01 | public   | 60|
| 2010-01-01 | private| 154|
| 2019-01-01 | private| 20|

理想情况下,我想以结束

| DATE| cow| value|LAST|
|:---- |:------:| -----:|-----:|
| 2010-01-01 | public   | 54| |
| 2019-01-01 | public   | 60||
| 2010-01-01 | private| 154| |
| 2019-01-01 | private| 20|20 |

使用dplyr:

library(dplyr)
df %>% group_by(cow) %>%
mutate(LAST = ifelse(row_number() == n(), value, NA))

这里有一个data.table:选项

library(data.table)
dt <- as.data.table(df)
dt[ , lastconv := ifelse(.I == .I[.N],value,NA ), by = cow]

输出

DATE     cow value lastconv
1: 2010-01-01  public    54       NA
2: 2019-01-01  public    60       60
3: 2010-01-01 private   154       NA
4: 2019-01-01 private    20       20

数据

df <- structure(list(DATE = c("2010-01-01", "2019-01-01", "2010-01-01", 
"2019-01-01"), cow = c("public", "public", "private", "private"
), value = c(54L, 60L, 154L, 20L)), class = "data.frame", row.names = c(NA, 
-4L))

最新更新