如何使用两个变量的值组合来创建可伸缩函数以将数据框子集为数据框列表

时间:2019-02-07 06:15:43

标签: r function dataframe data.table tidyverse

我希望能将下面的sampleDT子集到数据帧列表中,以便该列表中的每个数据帧都由变量imput和{{ 1}}。

drawhere讨论的方法data_variable <- split(data, data$variable)仅在意图仅使用一个变量作为规则的情况下有效。在我的分析中,我可能将两个以上的变量用作子集的规则,因此,很容易找到一种可以轻松适应两个以上变量的解决方案。

#sample数据

sampleDT<-structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 
3, 3, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 
3, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 
4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 
4, 4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 
4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 
4, 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 
4, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 
1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 1, 
1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4), imput = c(1, 
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 
3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 
4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 
5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 
1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 
3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 
4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 
5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 
1, 2, 3, 4, 5, 1, 2, 3, 4, 5), A = c(1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0), B = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 
0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 
0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 
0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 
1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 
1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0), Pass = c(278, 
278, 278, 278, 278, 100, 100, 100, 100, 100, 153, 153, 153, 153, 
153, 79, 79, 79, 79, 79, 278, 278, 278, 278, 278, 100, 100, 100, 
100, 100, 153, 153, 153, 153, 153, 79, 79, 79, 79, 79, 278, 278, 
278, 278, 278, 100, 100, 100, 100, 100, 153, 153, 153, 153, 153, 
79, 79, 79, 79, 79, 278, 278, 278, 278, 278, 100, 100, 100, 100, 
100, 153, 153, 153, 153, 153, 79, 79, 79, 79, 79, 278, 278, 278, 
278, 278, 100, 100, 100, 100, 100, 153, 153, 153, 153, 153, 79, 
79, 79, 79, 79, 278, 278, 278, 278, 278, 100, 100, 100, 100, 
100, 153, 153, 153, 153, 153, 79, 79, 79, 79, 79, 278, 278, 278, 
278, 278, 100, 100, 100, 100, 100, 153, 153, 153, 153, 153, 79, 
79, 79, 79, 79, 278, 278, 278, 278, 278, 100, 100, 100, 100, 
100, 153, 153, 153, 153, 153, 79, 79, 79, 79, 79, 278, 278, 278, 
278, 278, 100, 100, 100, 100, 100, 153, 153, 153, 153, 153, 79, 
79, 79, 79, 79, 278, 278, 278, 278, 278, 100, 100, 100, 100, 
100, 153, 153, 153, 153, 153, 79, 79, 79, 79, 79), Fail = c(740, 
743, 742, 743, 740, 7581, 7581, 7581, 7581, 7581, 1231, 1232, 
1235, 1235, 1232, 1731, 1732, 1731, 1731, 1731, 740, 743, 742, 
743, 740, 7581, 7581, 7581, 7581, 7581, 1231, 1232, 1235, 1235, 
1232, 1731, 1732, 1731, 1731, 1731, 740, 743, 742, 743, 740, 
7581, 7581, 7581, 7581, 7581, 1231, 1232, 1235, 1235, 1232, 1731, 
1732, 1731, 1731, 1731, 740, 743, 742, 743, 740, 7581, 7581, 
7581, 7581, 7581, 1231, 1232, 1235, 1235, 1232, 1731, 1732, 1731, 
1731, 1731, 740, 743, 742, 743, 740, 7581, 7581, 7581, 7581, 
7581, 1231, 1232, 1235, 1235, 1232, 1731, 1732, 1731, 1731, 1731, 
740, 743, 742, 743, 740, 7581, 7581, 7581, 7581, 7581, 1231, 
1232, 1235, 1235, 1232, 1731, 1732, 1731, 1731, 1731, 740, 743, 
742, 743, 740, 7581, 7581, 7581, 7581, 7581, 1231, 1232, 1235, 
1235, 1232, 1731, 1732, 1731, 1731, 1731, 740, 743, 742, 743, 
740, 7581, 7581, 7581, 7581, 7581, 1231, 1232, 1235, 1235, 1232, 
1731, 1732, 1731, 1731, 1731, 740, 743, 742, 743, 740, 7581, 
7581, 7581, 7581, 7581, 1231, 1232, 1235, 1235, 1232, 1731, 1732, 
1731, 1731, 1731, 740, 743, 742, 743, 740, 7581, 7581, 7581, 
7581, 7581, 1231, 1232, 1235, 1235, 1232, 1731, 1732, 1731, 1731, 
1731), draw = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 
10L, 10L, 10L), .Label = c("Weights_1", "Weights_2", "Weights_3", 
"Weights_4", "Weights_5", "Weights_6", "Weights_7", "Weights_8", 
"Weights_9", "Weights_10"), class = "factor"), weight = c(4, 
3, 4, 3, 3, 1, 2, 1, 2, 1, 12, 12, 11, 12, 12, 3, 5, 3, 3, 3, 
3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 3, 3, 3, 3, 
3, 4, 3, 3, 3, 3, 1, 2, 1, 1, 1, 12, 12, 11, 12, 12, 3, 3, 3, 
3, 3, 3, 3, 4, 3, 3, 1, 1, 1, 2, 1, 12, 12, 13, 12, 12, 3, 2, 
3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 1, 1, 1, 12, 12, 12, 12, 12, 3, 
3, 3, 3, 3, 4, 3, 3, 3, 3, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 12, 12, 12, 12, 
12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 15, 12, 12, 
12, 12, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 1, 1, 1, 1, 1, 12, 12, 
12, 12, 12, 2, 3, 3, 3, 3, 3, 3, 4, 3, 3, 1, 1, 1, 1, 1, 12, 
10, 12, 12, 12, 3, 3, 3, 3, 3)), row.names = c(NA, -200L), class = "data.frame")

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

test('getActiveProject => Project', async () => {
    let previouslyOpenProject = await client.getActiveProject()
    if (!previouslyOpenProject) {
        previouslyOpenProject = await client.createProject();
    }
    let project = await client.getActiveProject();
    expect(project.id).toBeGreaterThanOrEqual(1);
});

这是一个列表,可以轻松更新以包含更多变量