2015-12-04 3 views
3

Это тип структуры, который у меня есть. Существует несколько тысяч строк в кадре данных, который имеет структуру, аналогичную структуре следующее:Преобразование кадра данных значения ключа в список

vct_names <- c("apples", "apples", "grapes", "apples", "grapes") 
vct_codes <- c(23, 35, 123, 43, 156) 
df_values <- data.frame(names = vct_names, codes = vct_codes) 

Я хочу, чтобы преобразовать фрейм данных выше в именованный список. Я хотел бы выполнить итерацию по каждой строке фрейма данных выше и преобразовать этот фрейм данных в список. Список будет иметь следующую структуру:

lst_values <- list() 
lst_values$apples <- c(23, 35, 43) 
lst_values$grapes <- c(123, 156) 

Любые идеи по элегантному способу решения этой проблемы.

ответ

4

Это было бы более экономичным:

> lst_values <- split(vct_codes, vct_names) 
> lst_values 
$apples 
[1] 23 35 43 

$grapes 
[1] 123 156 
+0

Согласен. Да. Легче читать тоже – markthekoala

1
lapply(split(df_values, df_values$names), function(z) z[,2]) 

$apples 
[1] 23 35 43 

$grapes 
[1] 123 156 
+0

Ее красота! Нужно ли нам встраивать split() внутри lapply() split (df_values, df_values ​​$ names), кажется, работает очень хорошо. – markthekoala

+0

'split()' разделяет data.frame на многие данные data.frame в списке, поэтому нужно перебирать каждый файл data.frame и вытаскивать только один столбец значений – sckott

+1

Нет необходимости в использовании. Функция split будет работать над векторами и возвращать именованный список. –

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