Конкатенация в R после каждых 10 рядов

У меня есть кадр данных с 113 строками, я хочу объединить каждые 10 строк.

Я пробую что-то вроде этого:

test<-runif(113)
test2<-paste(test, collapse", ")

Я не знаю, кого я могу указать на каждые 10 строк.

2 ответа

Если это data.frame

set.seed(42)
d1 <- as.data.frame(matrix(sample(1:20, 4*113,replace=TRUE), ncol=4))
indx <- (seq_len(nrow(d1))-1)%/%10 +1
lapply(split(d1, indx), function(x) paste(unlist(x), collapse=", "))

Или

unname(c(by(d1, list(indx), FUN=function(x) paste(unlist(x), collapse=", "))))


Во-первых, у вас есть вектор, а не кадр данных.

Во-вторых, синтаксис пасты неверен (это, вероятно, вызывает ошибку для вас).

Вы можете использовать следующее, чтобы разделить вектор каждые 10 элементов, выполнить конкатенацию и вернуть результаты в виде символьного вектора.

test2 <- unlist(lapply(split(test, ceiling(seq_along(test)/10)), paste, collapse=", "))

seq_along создает "группы" и split, делит вектор вдоль этих групп. Затем, lapply этого, выполняется paste в эти группы, а unlist изменений возвращается к символьному вектору.

licensed under cc by-sa 3.0 with attribution.