неожиданный вывод из совокупности
Пока экспериментирую сaggregate
для другого вопросаВотЯ столкнулся с довольно странным результатом. Я не могу понять почему и мне интересно, что я делаю совершенно неправильно.
Предположим, у меня естьdata.frame
нравится:
df <- structure(list(V1 = c(1L, 2L, 1L, 2L, 3L, 1L),
V2 = c(2L, 3L, 2L, 3L, 4L, 2L),
V3 = c(3L, 4L, 3L, 4L, 5L, 3L),
V4 = c(4L, 5L, 4L, 5L, 6L, 4L)),
.Names = c("V1", "V2", "V3", "V4"),
row.names = c(NA, -6L), class = "data.frame")
> df
# V1 V2 V3 V4
# 1 1 2 3 4
# 2 2 3 4 5
# 3 1 2 3 4
# 4 2 3 4 5
# 5 3 4 5 6
# 6 1 2 3 4
Теперь, если я хочу вывестиdata.frame
с участиемуникальные строки с дополнительным столбцом, указывающим их частоту вdf
, Для этого примера
# V1 V2 V3 V4 x
# 1 1 2 3 4 3
# 2 2 3 4 5 2
# 3 3 4 5 6 1
Я получил этот вывод, используяaggregate
экспериментируя следующим образом:
> aggregate(do.call(paste, df), by=df, print)
# [1] "1 2 3 4" "1 2 3 4" "1 2 3 4"
# [1] "2 3 4 5" "2 3 4 5"
# [1] "3 4 5 6"
# V1 V2 V3 V4 x
# 1 1 2 3 4 1 2 3 4, 1 2 3 4, 1 2 3 4
# 2 2 3 4 5 2 3 4 5, 2 3 4 5
# 3 3 4 5 6 3 4 5 6
Итак, это дало мне вставленную строку. Итак, если бы я использовалlength
вместоprint
, он должен дать мне количество таких случаев, что является желаемым результатом, который имел место (как показано ниже).
> aggregate(do.call(paste, df), by=df, length)
# V1 V2 V3 V4 x
# 1 1 2 3 4 3
# 2 2 3 4 5 2
# 3 3 4 5 6 1
И это, похоже, сработало. Тем не менее, когдаdata.frame
размеры 4 * 2500, выходdata.frame
1 * 2501 вместо 4 * 2501 (все строки уникальны, поэтому частота равна 1).
> df <- as.data.frame(matrix(sample(1:3, 1e4, replace = TRUE), nrow=4))
> o <- aggregate(do.call(paste, df), by=df, length)
> dim(o)
# [1] 1 2501
Я протестировал с меньшими data.frames только с уникальными строками, и это дает правильный вывод (изменениеnrow=40
, например). Однако, когда размеры матрицы увеличиваются, это, похоже, не работает. И я просто не могу понять, что происходит не так! Есть идеи?