Как сгруппировать в строку значения одного и того же значения в столбце с R?

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

Type    Value
A        12
B        20
A        14
A        13
B        15

Что-то вроде этого:

A   12,14,13
B   20,15

Любая идея о том, как это сделать?

Заранее спасибо!


person Amnor    schedule 30.05.2016    source источник
comment
Попробуйте aggregate(Value~Type, df1, FUN= toString)   -  person akrun    schedule 30.05.2016


Ответы (4)


Использовать базу проще всего:

aggregate(df$Value~df$Type,FUN=c)

  df$Type   df$Value
1       A 12, 14, 13
2       B     20, 15

использование FUN=c сохраняет тип значения числовым (фактически числовым вектором), что лучше, чем преобразование в строку

однако.... если больше преобразований не требуется, и вы хотите сохранить вышеуказанное как CSV - вы ДЕЙСТВИТЕЛЬНО хотите преобразовать в String:

write.csv(x = aggregate(df$Value~df$Type,FUN=toString),file = "nameMe")

работает отлично.

person Zahiro Mor    schedule 30.05.2016
comment
Это работает, но я не могу записать результат в CSV-документ. Может ли он быть записан в формате csv, как документ, или в виде простого текста? Когда я пытаюсь записать csv, я получаю это сообщение: Error inn .External2 (C_writetable, x, file, nrow (x), p, rnames, sep, eol,: не реализован тип «список» в «EncodeElement» - person Amnor; 30.05.2016

Мы могли бы использовать aggregate из base R

aggregate(Value~., df1, FUN= toString)
#   Type      Value
#1    A 12, 14, 13
#2    B     20, 15
person akrun    schedule 30.05.2016

Другая альтернатива с использованием data.table:

Предположение: data.frame хранится в переменной df.

library(data.table)

setDT(df)

df[,.(Value = paste(Value,collapse=',')),.(Type)]
person Kunal Puri    schedule 30.05.2016

Вы можете использовать библиотеку tidyr.

> library(tidyr)
> spread(df, Type, Value)
   A  B
1 12 NA
2 NA 20
3 14 NA
4 13 NA
5 NA 15
person Mhairi McNeill    schedule 30.05.2016