我有一个包含四列的数据框:两列表示参加一项运动,而另两列表示运动员是否通过了两次体检。
dat <- data.frame(SOCCER = sample(0:1, 10, replace = T),
BASEBALL = sample(0:1, 10, replace = T),
TEST_1_PASS = sample(0:1, 10, replace = T),
TEST_2_PASS = sample(0:1, 10, replace = T))
我想获取一个包含每种运动和考试的意外事件表的列表。我知道我可以使用以下代码来完成此操作,该代码使用嵌套的lapply语句,但这使我感到效率低下。任何人都可以提出一种不使用嵌套的更优雅的解决方案吗?
results <- lapply(c("SOCCER", "BASEBALL"), function(x) {
lapply(c("TEST_1_PASS", "TEST_2_PASS"), function(y){
table(sport = dat[[x]], pass = dat[[y]])
})
})
一如既往的感谢!
double lapply
获取每个列向量中列的所有成对组合,就像@Gregor在评论中写的那样
我认为您的嵌套效率不高...您需要调用表4次。这是否在一个循环内/套用并不重要4个项目或2个嵌套循环/重叠,每个都有2个项目。
但是这是另一种方式,其中一个循环变相为expand.grid
。
cols <- expand.grid(x = c("SOCCER", "BASEBALL"),
y = c("TEST_1_PASS", "TEST_2_PASS"),
stringsAsFactors = FALSE)
Map(function(.x, .y)table(dat[[.x]], dat[[.y]]), cols$x, cols$y)