2016-01-16 2 views
2

У меня есть массив:как разбить массив на отдельные массивы (R)?

>cent 
     b e   r f 
A19 60.46 0.77 -0.12 1 
A15 16.50 0.53 0.08 2 
A17 2.66 0.51 0.20 3 
A11 36.66 0.40 -0.25 4 
A12 38.96 0.91 0.23 1 
A05 0.00 0.29 0.01 2 
A09 3.40 0.35 0.03 3 
A04 0.00 0.25 -0.03 4 

Может кто-нибудь пожалуйста, скажите мне, как разделить этот массив в 4-х отдельных массивов, где последний столбец «е» является флаг? В результате я хотел бы видеть:

>cent1 
     b e   r f 
A19 60.46 0.77 -0.12 1 
A12 38.96 0.91 0.23 1 
>cent2 
     b e   r f 
A15 16.50 0.53 0.08 2 
A05 0.00 0.29 0.01 2 
…. 

Должен ли я использовать для цикла и проверить флаг «F» или существуют функции сборки в? Благодарю.

+0

Если это действительно массив, а не кадр данных, то попробуйте [это один] (HTTP://stackoverflow.com/questions/30122693/named-arrays-dataframes-and-matrices) –

+0

Если приведенное ниже решение решает проблему, попробуйте принять его, нажав галочку рядом с голосованием. – akrun

ответ

1

Мы можем использовать split для создания list из data.frames.

lst <- split(cent, cent$f) 

ПРИМЕЧАНИЕ: Здесь я предположил, что «цент» - это data.frame. Если это matrix

lst <- split(as.data.frame(cent), cent[,"f"]) 

Как правило, это достаточно, чтобы сделать большую часть анализа. Но, если нам нужно создать несколько объектов в глобальной среде, мы можем использовать list2env (не рекомендуется)

list2env(lst, paste0("cent", seq_along(lst)), envir= .GlobalEnv) 
+0

благодарит вас за ответ. Функция split() работает. Теперь у меня есть список lst. Как я могу обратиться к элементам из списка lst [1], которые имеют один и тот же тип, например $ b? – Nick

+0

Я пробовал lst [1] $ b, lst ['1'], lst [1] $ '1'. Но мне нужно извлечь только первый столбец. – Nick

+0

@Nick Если вам нужен первый столбец 'lst [[1]] [1]' (если набор данных - это data.frame), if is - это матрица 'lst [[1]] [, 1]' – akrun

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