У меня есть data.table
, скажем, dat
. Ниже приводится его dput
держите х строк и удалите остаток на 2 столбца
structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4, 4.6,
5, 4.4, 4.9), Sepal.Width = c(3.5, 3, 3.2, 3.1, 3.6, 3.9, 3.4,
3.4, 2.9, 3.1), Petal.Length = c(1.4, 1.4, 1.3, 1.5, 1.4, 1.7,
1.4, 1.5, 1.4, 1.5), Petal.Width = c(0.2, 0.2, 0.2, 0.2, 0.2,
0.4, 0.4, 0.2, 0.1, 0.1), Species = c("a", "a", "a", "a", "b",
"b", "b", "b", "b", "b")), .Names = c("Sepal.Length", "Sepal.Width",
"Petal.Length", "Petal.Width", "Species"), row.names = c(NA,
-10L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000000330788>)
dat
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1: 5.1 3.5 1.4 0.2 a
2: 4.9 3.0 1.4 0.2 a
3: 4.7 3.2 1.3 0.2 a
4: 4.6 3.1 1.5 0.2 a
5: 5.0 3.6 1.4 0.2 b
6: 5.4 3.9 1.7 0.4 b
7: 4.6 3.4 1.4 0.4 b
8: 5.0 3.4 1.5 0.2 b
9: 4.4 2.9 1.4 0.1 b
10: 4.9 3.1 1.5 0.1 b
Хочу сделать следующее,
1) Вычислить минимальную частоту любой комбинации столбцов Petal.Width
и Species
в данных (который является 2 в приведенном выше примере). Назовем это число x
. Ниже приведены комбинации этих 2-х столбцов в данных
Species Petal.Width Frequency
a 0.2 4
b 0.2 2
b 0.4 2
b 0.1 2
2) Хранить только x
(2 в нашем примере) наблюдений вкось для каждой комбинации столбцов Petal.Width
и Species
Когда мы должны держать только 1 случай в случайном порядке в таком сценарии мы делаем
dat <- unique(dat, by = c("Petal.Width", "Species")
Но что мы делаем, когда мы хотим, чтобы x
случаи, а не просто 1 (что тоже случайно)?
Выход может выглядеть так
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2: 4.9 3.0 1.4 0.2 a
4: 4.6 3.1 1.5 0.2 a
5: 5.0 3.6 1.4 0.2 b
6: 5.4 3.9 1.7 0.4 b
7: 4.6 3.4 1.4 0.4 b
8: 5.0 3.4 1.5 0.2 b
9: 4.4 2.9 1.4 0.1 b
10: 4.9 3.1 1.5 0.1 b
В этом примере, только два случая комбинации (а, 0,2), будут удалены, так как другие комбинации удовлетворяют минимальным критериям частоты.
'образца (.N, х)' может быть использован вместо 'образца (1: .N, х) '. Кроме того, вы можете использовать '.I' как' dat [dat [, .I [sample (.N, 2)], by = c («Petal.Width», «Species»)] $ V1] 'как показано eddi здесь: http://stackoverflow.com/a/16574176/1191259 – Frank