bzi*_*ggy 1 r apply rbind do.call
我试图了解如何在语句中正确格式化 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)
为什么这不起作用?我需要更改格式吗?
不使用==,而是使用%in%直接子集化
subset(data, facility_id %in% facilities_id_list)
Run Code Online (Sandbox Code Playgroud)
在OP的代码中,存在多个问题 - 1)输入参数是facilities_id_list在其中lapply,我们正在循环序列i。,2)facility_id==facility应该是data$facility_id==facility我们正在使用的[并且没有数据绑定,3)我们需要指定我们使用行索引进行子集化,默认情况下没有任何,,它被视为列索引data.frame
facility_counts<-function(i){
facility<-facilities_id_list[[i]]
data[data$facility_id == facility, ]
}
> do.call(rbind, lapply(seq_along(facilities_id_list), facility_counts))
facility_id patient_number test_result
1 123 1000 25
2 123 1000 30
3 25 1001 12
4 25 1002 67
5 25 1010 75
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |