我的数据如下:
ID Test Type Subject Marks
1 Unit test 1 English 85
2 Unit test 1 English 75
3 Unit test 1 English 78
1 Unit test 2 English 85
2 Unit test 2 English 75
3 Unit test 2 English 78
1 Unit test 1 Maths 78
2 Unit test 1 Maths 79
3 Unit test 1 Maths 98
1 Unit test 2 Maths 95
2 Unit test 2 Maths 98
3 Unit test 2 Maths 88
我想按“测试类型”和“主题”拆分数据。我应该使用什么函数? 我想要的结果是:
data frame 1:
ID Test Type Subject Marks
1 Unit test 1 English 85
2 Unit test 1 English 75
3 Unit test 1 English 78
data frame 2:
ID Test Type Subject Marks
1 Unit test 2 English 85
2 Unit test 2 English 75
3 Unit test 2 English 78
data frame 3 :
ID Test Type Subject Marks
1 Unit test 1 Maths 78
2 Unit test 1 Maths 79
3 Unit test 1 Maths 98
data frame 4:
ID Test Type Subject Marks
1 Unit test 2 Maths 95
2 Unit test 2 Maths 98
3 Unit test 2 Maths 88
最佳答案
您可以使用split()
(感谢 DrDom 的改进)。
split(df, list(df$Test.Type, df$Subject))
# $`Unit test 1.English`
# ID Test.Type Subject Marks
# 1 1 Unit test 1 English 85
# 2 2 Unit test 1 English 75
# 3 3 Unit test 1 English 78
#
# $`Unit test 2.English`
# ID Test.Type Subject Marks
# 4 1 Unit test 2 English 85
# 5 2 Unit test 2 English 75
# 6 3 Unit test 2 English 78
#
# $`Unit test 1.Maths`
# ID Test.Type Subject Marks
# 7 1 Unit test 1 Maths 78
# 8 2 Unit test 1 Maths 79
# 9 3 Unit test 1 Maths 98
#
# $`Unit test 2.Maths`
# ID Test.Type Subject Marks
# 10 1 Unit test 2 Maths 95
# 11 2 Unit test 2 Maths 98
# 12 3 Unit test 2 Maths 88
其中df
是原始数据。
df <- structure(list(ID = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L), Test.Type = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 1L,
1L, 1L, 2L, 2L, 2L), .Label = c("Unit test 1", "Unit test 2"), class = "factor"),
Subject = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L), .Label = c("English", "Maths"), class = "factor"),
Marks = c(85L, 75L, 78L, 85L, 75L, 78L, 78L, 79L, 98L, 95L,
98L, 88L)), .Names = c("ID", "Test.Type", "Subject", "Marks"
), class = "data.frame", row.names = c(NA, -12L))
关于r - 在 R 中,如何按多列中的因素拆分/子集数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29247948/