2016-07-08 58 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

相關問題