如何解决R dplyr函数计算条件距离
一个小问题:给定R条件,您将如何计算两点之间的时间距离。请参见下面的简短示例。上下文如下,我有一组公司,这些公司在某些时期会经历信用评级下降。我如何计算自上次评级降级以来的时间。有月份和等级,我想获得:
Data <- data.frame(
Month = c(1,2,3,4,5,6,7,8,9,10,11,12),rating = c(1,1,3),rating_change = c(0,0),t_since_change = c(NA,NA,1)
)
基本上,因为我有很多公司,所以我这样做:
temp <- Data %>%
group_by(Firms,Month) %>%
mutate(rc = rating - lag(rating)) %>%
mutate(rating_change = ifelse(rc >0,0))
但是我无法计算t_since_change
。有人有主意吗?
解决方法
下面的代码应适用于您的数据:
library(tidyverse)
Data <- data.frame(
Month = c(1,2,3,4,5,6,7,8,9,10,11,12),rating = c(1,1,3)
)
Data %>%
mutate(change = rating > lag(rating)) %>%
mutate(last_change = Month * ifelse(is.na(change),NA,ifelse(change,TRUE,NA)) ) %>%
fill(last_change) %>%
mutate(time_since = Month - last_change)
,
检查这是否是您想要的。我使用了data.table。
Data <- data.frame(
Month = c(1,3),rating_change = c(0,0),)
library(data.table)
DT <- as.data.table(Data)
DT[,t_since_change := NA_integer_]
j <- 0
for (i in seq_len(nrow(DT))) {
if (DT[i,rating_change] == 1) {
DT[i,t_since_change := 0]
j <- i
next
}
if (j == 0) {
next
}
DT[i,t_since_change := (i - j)]
}
输出:
> DT
Month rating rating_change t_since_change
1: 1 1 0 NA
2: 2 1 0 NA
3: 3 1 0 NA
4: 4 1 0 NA
5: 5 2 1 0
6: 6 2 0 1
7: 7 2 0 2
8: 8 2 0 3
9: 9 2 0 4
10: 10 2 0 5
11: 11 3 1 0
12: 12 3 0 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。