2014-02-14 3 views
-1

у меня есть кадр данных, как этотРасщепление dataframe в соответствии с последовательностью

V1 V2 V3 V4 V5 ... V8030 
2 4 5 4 16 ... 2 
. 
. 
. 

с Ncol = 8030. Для каждой строки я хотел бы сгруппировать каждый столбец с теми, которые я добавляю в индекс столбца 365.

До сих пор я был разделив кадр данных в виде списка, содержащего значения для каждой строки

list <- split(df, rep(1:nrow(df), each = ncol(df))) 

, но тогда я не знаю, как поступить.

Большое спасибо

+0

Что вы имеете в виду с колонками групп? Как выглядит ваш желаемый объект? – Rufo

+0

Я имею в виду для каждой строки. Я хочу усреднить значения, соответствующие столбцам, которые я получаю при добавлении 365 к индексу столбца. Поэтому я хочу получить 22 значения для каждой строки – user3036416

+0

@ user3036416 не торопитесь и приложите усилия для предоставления [воспроизводимого примера] (http://stackoverflow.com/q/5963269/1315767), чтобы мы могли вам помочь. –

ответ

1

Главное, что вам нужно сделать, это использовать здесь split.default вместо split, как метод data.frame для split будет разделен на строки вместо столбцов. Следующий алгоритм будет генерировать кадр данных, где каждый столбец является средним значением столбцов (n, n + m, n + 2 * m + ... + k * m) и т.д., где в вашем случае m составляет 365, k - 22, а n относится к 1:365.

df.split <- split.default(df, rep(1:m, ncol(df)/m)) 
as.data.frame(lapply(df.split, apply, 1, mean, na.rm=T)) 

Это предполагает, что ваша кадр данных имеет кратное m колонн. В вашем случае m - 365, и ваш фрейм данных имеет несколько таких. И вот некоторые данные, которые я составил для тестирования:

set.seed(1) 
m <- 5 # 365 in your case 
k <- 3 # 22 in your case (8030/365) 
df <- as.data.frame(replicate(k * m, sample(1:100, 10), simplify=F)) 
names(df) <- paste0("V", 1:(k * m)) 
df[[1]][[5]] <- NA 
+0

Привет, что вместо этого, если у меня есть значения NA в каждой строке? В этом случае я не хочу включать их в среднем. Большое спасибо – user3036416

+0

@ user3036416, см. Правки. Также обратите внимание, что я составлял в среднем 1 м, (м + 1) -2 м, (2 м + 1) -3 м, что привело бы к результату 22 столбцов вместо 365, которые вы ожидаете. Это исправлено. Кроме того, с помощью 'na.rm' и' mean', теперь значения NA будут исключены из средств (поэтому, если у вас есть одно значение NA в вашей строке для столбцов 1, 366, 731 и т. Д., Среднее значение будет вычисляться на 21 значение вместо 22). – BrodieG

Смежные вопросы