r - 根据另一列的条件在 R 中添加新列
问题描述
我有一个这样的data.frame:
Clinic Month Appointments
A 31-01-2019 0
A 28-02-2019 0
A 31-03-2019 3
A 30-04-2019 5
A 31-05-2019 0
A 30-06-2019 5
B 31-01-2019 0
B 28-02-2019 5
而且我想添加一个名为Live_months
自第一次约会以来的月数的新列,即使之后还有另一个月份有 0 个约会,例如:
Clinic Month Appointments Live_months
A 31-01-2019 0 0
A 28-02-2019 0 0
A 31-03-2019 3 1
A 30-04-2019 5 2
A 31-05-2019 0 3
A 30-06-2019 5 4
B 31-01-2019 0 0
B 28-02-2019 5 1
我怎么能这样做?
解决方案
您可以使用 :
library(dplyr)
library(lubridate)
df %>%
mutate(Date = dmy(Month),
year = year(Date),
Month = month(Date)) %>%
arrange(Clinic, Date) %>%
group_by(Clinic) %>%
mutate(Live_months = {
i <- which(Appointments > 0)[1]
pmax((year - year[i]) * 12 + Month - Month[i] + 1, 0)
})
# Clinic Month Appointments Date year Live_months
# <chr> <dbl> <int> <date> <dbl> <dbl>
#1 A 1 0 2019-01-31 2019 0
#2 A 2 0 2019-02-28 2019 0
#3 A 3 3 2019-03-31 2019 1
#4 A 4 5 2019-04-30 2019 2
#5 A 5 0 2019-05-31 2019 3
#6 A 6 5 2019-06-30 2019 4
#7 B 1 0 2019-01-31 2019 0
#8 B 2 5 2019-02-28 2019 1
数据
df <- structure(list(Clinic = c("A", "A", "A", "A", "A", "A", "B",
"B"), Month = c("31-01-2019", "28-02-2019", "31-03-2019", "30-04-2019",
"31-05-2019", "30-06-2019", "31-01-2019", "28-02-2019"), Appointments = c(0L,
0L, 3L, 5L, 0L, 5L, 0L, 5L)), class = "data.frame", row.names = c(NA, -8L))
推荐阅读
- python - 命令“python setup.py egg_info”失败,错误代码 1 在 /tmp/pip-build-q4jjryc_/opencv-python/
- r - 如何将fasta字符串分成多行保持r中的列数不变?
- flutter - 设置边框颜色给 const 变量必须用一个常量值初始化
- javascript - 如果存在多个选项卡,则使用下一个箭头引导选项卡
- python - 使用 Oozie 调度具有依赖项的 Python 脚本
- flutter - 颤动中gridview项目上的动画
- php - 如何逃避 Codeigniter 语言功能?
- android - Fragment与ViewLifecycleOwner的偏差
- c - 如何在运行时打印 .so 文件位置?
- c - 使用 nanosleep 在 c 代码中利用小停顿的问题