r - 如何从同一列中的值创建新变量?
问题描述
我的目标是创建一个新变量,表示纵向数据同一列中两个日期之间的差异
animal data new_var
1 15/03/2020 NA
1 18/03/2020 3
1 18/04/2020 30
1 20/04/2020 2
2 13/01/2020 NA
2 18/01/2020 5
2 25/01/2020 7
2 25/03/2020 30
new_var 是同一动物的两个连续日期之间的差异(以天为单位)。该文件之前按动物和日期排序。
我想到了以下解决方案:
animal data data2 new_var
1 15/03/2020 . .
1 18/03/2020 15/03/2020 3
1 18/04/2020 18/03/2020 30
1 20/04/2020 18/04/2020 2
2 13/01/2020 . NA
2 18/01/2020 13/01/2020 5
2 25/01/2020 18/01/2020 7
2 25/03/2020 25/01/2020 60
我尝试使用diff 功能,但在尝试此操作时收到错误消息:
df$data2 <- diff(df$data, lag=1) df$new_var <- df$data - df$data2
我希望我能清楚地传达我的信息。如果不是,我认为一小段示例代码以及我想如何扩展它应该足够清楚。期待建议。
解决方案
做法略有不同。如果您只希望as.numeric
按照 akrun 的建议使用数字!
library(dplyr)
library(lubridate)
df1 <- df %>%
group_by(animal) %>%
mutate(data2 = lag(data)) %>%
mutate(new_var = dmy(data) - dmy(data2)) %>%
mutate(new_var1 = as.numeric(dmy(data) - dmy(data2))) # idea from akrun
> df1
# A tibble: 8 x 5
# Groups: animal [2]
animal data data2 new_var new_var1
<int> <chr> <chr> <drtn> <dbl>
1 1 15/03/2020 NA NA days NA
2 1 18/03/2020 15/03/2020 3 days 3
3 1 18/04/2020 18/03/2020 31 days 31
4 1 20/04/2020 18/04/2020 2 days 2
5 2 13/01/2020 NA NA days NA
6 2 18/01/2020 13/01/2020 5 days 5
7 2 25/01/2020 18/01/2020 7 days 7
8 2 25/03/2020 25/01/2020 60 days 60
推荐阅读
- node.js - bcrypt 比较需要一分钟以上才能完成
- search - 省略号在搜索引擎中被忽略
- python - 如何在 Django 中获取使用带方括号的字段名称作为结构化对象的表单 postdata?
- git - 从背面同步到 git repo 时更改发布作者
- android - Flutter 上带有条件导航的启动画面
- arrays - 最低数量 将一个数组转换为另一个数组所需的更改
- c# - Loop-While 在不影响其他功能的设置超时内
- laravel - 除了 Laravel 中的主页 url,所有链接都不起作用
- javascript - 如何动态地将数组添加到对象?
- neo4j - Neo4j Cypher 查询:WHERE 子句中未考虑括号?