2016-07-08 41 views
0

具有下列数据帧为例:合并数据框中行由相同的名称

data_ = data.frame(name = c("name1", "name2","name1"), product = c("product1", "product2", "product3")) 

输出是:

name1 product1 
name2 product2 
name1 product3 

我想用相同的名称合并其行。因此,其结果会是什么样子:

name1 product1, product3 
name2 product2 

我,使用R 2.15.2,所以我不能使用aggregate

+0

reshape2 :: dcast(data_,name〜product) – Arcoutte

回答

2

也许是最自然的方式来存储这些数据是作为一个列表,因为有每个名称的元素数量不同。这是一种方式来获得与特征向量命名列表为您的产品:

lapply(split(data_, data_$name), function(i) {i$name <- NULL; as.character(unlist(i))}) 
$name1 
[1] "product1" "product3" 

$name2 
[1] "product2" 

我转换的产品,这通常更容易使用as.character工作角色,虽然这是没有必要的。

在原始示例中,对象data_是数据框。但是,如果它是一个列表,然后将代码变得更简单的方法:

# build list 
data_ = list(name = c("name1", "name2","name1"), product = c("product1", "product2", "product3")) 

# split list along names variable: 
split(data_$product, data_$name) 
$name1 
[1] "product1" "product3" 

$name2 
[1] "product2" 

这是与上面相同,但我们没有卸载额外的结构比伴随拆分数据帧与因子变量。

+1

如果data_是一个列表,请参阅我的其他意见。 – lmo

相关问题