我有一个data.frame,可以查看犯罪发生率。一个城市第一次报告犯罪时,我们将其写为0。我们想将一个城市的第一次犯罪与其他犯罪进行比较,直到发现两者之间有20天的犯罪。发生这种情况时,我们将那个犯罪日与某个城市的其他犯罪进行比较,直到找到20天。我们用0和1对此进行编码,城市的第一个犯罪总是得到0。
我知道这可能会造成混淆,因此下面的data.frame希望可以更好地说明问题:
City Days
City1 0
City1 4
City1 20
City2 0
City2 20
City3 0
City3 20
City3 30
因此,最终的data.frame将是
City Days Result
City1 0. 1
City1 4. 0
City1 20. 1
City2 0. 1
City2 20. 1
City3 0. 1
City3 20. 1
City3 30. 0
我目前有一个复杂的嵌套for循环,它循环遍历城市及其事件。我创建了一个索引,如果城市犯罪的差异大于20,该索引将更改。然后更新此索引。但是,这已变得乏味且可怕。任何其他选择都将是有益的。
答案 0 :(得分:0)
也许您正在寻找此解决方案
< input type="file" name="article_input_file" id="article_input_file" accept=".xlsx,.xls" style="display: none" >
$("#article_input_file").click();
答案 1 :(得分:0)
您可以使用lag
来抵消“天数”列以查找犯罪天数之间的差额:
library(dplyr)
df <- read.table(text = "City Days
City1 0
City1 4
City1 20
City2 0
City2 20
City3 0
City3 20
City3 30", header = TRUE) %>%
as_tibble()
df %>%
group_by(City) %>%
mutate(tmp = lag(Days),
Result = ifelse(Days - tmp >= 20 | is.na(tmp), 1, 0)) %>%
select(-tmp)