我需要在大约 150K 行的数据帧上运行循环。但是,循环需要检查每一行并检查一个检查数据集中每隔一行的条件。我的代码对于玩具数据集运行良好,它产生正确的值,但对于我的实际数据集来说太慢了。我让它运行了几个小时,但它仍然没有完成。所以我希望有人能更好地了解如何解决这个问题。
#R version 3.5.1 Windows 64-bit
#Example dataset
my_df <- data.frame("PERSON" = c("A","A","A","B","A","A","B"),
"DATE_START" = c("2019-01-15","2019-01-10","2019-01-20","2019-01-19","2018-12-20","2018-03-03","2019-05-01"),
"DATE_FINISH" = c("2019-01-30","2019-01-18","2019-02-05","2019-01-23","2019-02-10","2018-04-01","2019-06-06")
)
#Each row is a task that the assigned person is working on
my_df
PERSON DATE_START DATE_FINISH
1 A 2019-01-15 2019-01-30
2 A 2019-01-10 2019-01-18
3 A 2019-01-20 2019-02-05
4 B 2019-01-19 2019-01-23
5 A 2018-12-20 2019-02-10
6 A 2018-03-03 2018-04-01
7 B 2019-05-01 2019-06-06
Run Code Online (Sandbox Code Playgroud)
我想知道的是,对于第 1 行,A 的开始日期和完成日期之间还有多少其他任务重叠?(包括其所在的行)
所以我正在寻找的答案是
PERSON DATE_START DATE_FINISH NUMBER_OF_TASKS
1 A 2019-01-15 2019-01-30 4 …Run Code Online (Sandbox Code Playgroud) 我无法理解 JS 中的作用域是如何工作的,我的背景是 R 和 Python。
这是一个玩具示例。games_array 最后总是打印为空。并且控制台中似乎不存在数组变量。
for(var row_i = 0; row_i < 50; row_i++){
var games_array = [];
if(row_i % 2 == 0){
console.log(data[row_i].name);
games_array.push(data[row_i].name);
}
}
console.log(games_array);
Run Code Online (Sandbox Code Playgroud)
但是这有效:
var games_array = [];
for(var row_i = 0; row_i < 50; row_i++){
if(row_i % 2 == 0){
console.log(data[row_i].name);
games_array.push(data[row_i].name);
}
}
console.log(games_array);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我不能创建一个空数组并在 for 循环中使用它。我需要将其包装在外循环中并在外循环中使用 games_array。
任何帮助表示赞赏。