我目前正在使用 R 来处理如下所示的数据集:
age ep
1 0
2 0
3 1
4 1
5 1
6 1
7 0
8 0
9 1
10 1
11 0
Run Code Online (Sandbox Code Playgroud)
我想创建一个变量来跟踪每个 ep=1 系列中第一次出现的 ep=1。这些系列的第一个 ep=1 之前的 ep=0 和每个系列的最后一个 ep=1 之后的 ep=0。
我希望数据集在处理后看起来像这样:
age ep first
1 0 NA
2 0 NA
3 1 1
4 1 NA
5 1 NA
6 1 NA
7 0 NA
8 0 NA
9 1 1
10 1 NA
11 0 NA
Run Code Online (Sandbox Code Playgroud)
我在数据表中工作,因为这个数据集相当大,所以我更喜欢使用数据表的代码处理数据,但是如果这不可能,我可以转换为数据框并使用其他代码。任何帮助将不胜感激。
我目前在数据表中使用 R 并且有两个日期列(first_day 和 last_day),我需要将它们合并到一个日期列(日期)中。需要这样做,以便列具有按组 (id) 从最小到最大的日期。
这是我正在使用的数据:
ID first_day last_day
1 1/12/2005 1/15/2005
2 2/15/2006 2/19/2006
2 3/8/2006 3/12/2006
3 1/9/2008 1/13/2008
Run Code Online (Sandbox Code Playgroud)
这是我试图让结果看起来像的内容:
ID first_day last_day Date
1 1/12/2005 1/15/2005 1/12/2005
1 1/12/2005 1/15/2005 1/15/2005
2 2/15/2006 2/19/2006 2/15/2006
2 2/15/2006 2/19/2006 2/19/2006
2 3/8/2006 3/12/2006 3/8/2006
2 3/8/2006 3/12/2006 3/12/2006
3 1/9/2008 1/13/2008 1/9/2008
3 1/9/2008 1/13/2008 1/13/2008
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助!
我试图了解如何在语句中正确格式化 lapply、rbind 和 do.call 的组合,但无法使语句正常运行。我提供了一个简单的示例函数和数据,我用它们来尝试理解格式。我完全理解我提供的场景可以使用更简单的方法来运行,这样做的目的是简单地理解格式以及如何在自定义函数上使用 lapply 和 rbind。
这是一些测试数据:
facility_id patient_number test_result
123 1000 25
123 1000 30
25 1001 12
25 1002 67
25 1010 75
65 1009 8
22 1222 95
22 1223 89
Run Code Online (Sandbox Code Playgroud)
我本质上是尝试使用设施 id 值列表对自定义函数内的数据进行子集化,然后希望将自定义函数生成的每个数据表绑定在一起。
这是我使用过的代码:
facilities_id_list<-c(123, 25)
facility_counts<-function(facilities_id_list){
facility<-facilities_id_list[[i]]
subset<-data[facility_id==facility]
}
results <- do.call("rbind", lapply(seq_along(facilities_id_list), function(i) facility_counts)
Run Code Online (Sandbox Code Playgroud)
我希望达到的结果:
facility_id patient_number test_result
123 1000 25
123 1000 30
25 1001 12
25 1002 67
25 1010 75
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我需要更改格式吗?