r - 使用 groupby 和填充的 R 条件变异日期列
问题描述
那里有类似措辞的问题,但没有一个完全显示我想要做什么。我在下面有一个数据框示例。我想 group_by ID 并创建一个 Date2 列,其中 rank=2。我很难弄清楚这一点。
ID Rank Date Date2
1 5678 1 2000-01-01 2010-05-02
2 5678 2 2010-05-02 2010-05-02
3 1234 1 2000-01-01 2015-06-03
4 1234 2 2015-06-03 2015-06-03
这是我到目前为止所拥有的:
df <- df %>% group_by(ID) %>%fill(Date2,.direction='up')
我该怎么办?
解决方案
尝试这个:
library(dplyr)
#Code
df %>% group_by(ID) %>% mutate(Date2=Date[Rank==2])
输出:
# A tibble: 4 x 4
# Groups: ID [2]
ID Rank Date Date2
<int> <int> <chr> <chr>
1 5678 1 2000-01-01 2010-05-02
2 5678 2 2010-05-02 2010-05-02
3 1234 1 2000-01-01 2015-06-03
4 1234 2 2015-06-03 2015-06-03
使用的一些数据:
#Data
df <- structure(list(ID = c(5678L, 5678L, 1234L, 1234L), Rank = c(1L,
2L, 1L, 2L), Date = c("2000-01-01", "2010-05-02", "2000-01-01",
"2015-06-03")), row.names = c("1", "2", "3", "4"), class = "data.frame")
另外,如果您想使用fill()
,可以尝试此代码。您必须使用条件ifelse()
来分配日期,然后填写值:
#Code 2
df %>% group_by(ID) %>%
mutate(Date2=ifelse(Rank==2,Date,NA)) %>%
fill(Date2,.direction = 'up')
输出:
# A tibble: 4 x 4
# Groups: ID [2]
ID Rank Date Date2
<int> <int> <chr> <chr>
1 5678 1 2000-01-01 2010-05-02
2 5678 2 2010-05-02 2010-05-02
3 1234 1 2000-01-01 2015-06-03
4 1234 2 2015-06-03 2015-06-03
推荐阅读
- python - os.path 在目录中移动
- apache - 错误 500 的 Apache ErrorDocument 不起作用
- java - CGLIB 在尝试使用 Spock Spy 时抛出 IllegalArgumentException
- javascript - laravel 将参数从 url 传递到路由和控制器
- c# - 如何在 JSON.NET 中取消转义 unicode
- dart - 如何在颤动中合并流?
- date - 需要更新我的 Google Mail 脚本上的日期格式
- python - random.randint 与变量 | 如何
- python - 使用 boto3 python api 终止 ECS 任务
- mysql - sql join 返回两个相同的值