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