0

我有 csv 格式的数据。

数据格式如下。收据编号在一栏中,产品在相应栏中

Receipt_no Product
A1  Apple
A1  Banana
A1  Orange
A2  Pineapple
A2  Jackfruit
A3  Cola
A3  Tea

我想将它们重新排列为

A1 ,  Apple, Banana, Orange
A2 , Pineapple, Jackfruit
A3 , Cola, Tea

即收据编号和产品名称在一行中,以逗号分隔。由于数据很大,我想在 R 中重新排列相同的数据。

请帮助

谢谢。

问候, Nithish

4

2 回答 2

0

基数 R,

aggregate(Product ~ Receipt_no, df, paste, collapse = ',')

使用dplyr,

df %>% 
  group_by(Receipt_no) %>% 
  summarise(new = paste(Product, collapse = ','))
于 2016-06-30T11:42:10.267 回答
0

使用基础 R:

u <- as.vector(unique(df$Receipt_no))
as.list(sapply(u, function(x) paste0(x, ", ", paste0(subset(df$Product, df$Receipt_no==x), collapse = ", "))))

# $A1
# [1] "A1, Apple, Banana, Orange"

# $A2
# [1] "A2, Pineapple, Jackfruit"

# $A3
# [1] "A3, Cola, Tea"

数据

df <- structure(list(Receipt_no = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 
3L), .Label = c("A1", "A2", "A3"), class = "factor"), Product = structure(c(1L, 
2L, 5L, 6L, 4L, 3L, 7L), .Label = c("Apple", "Banana", "Cola", 
"Jackfruit", "Orange", "Pineapple", "Tea"), class = "factor")), .Names = c("Receipt_no", 
"Product"), class = "data.frame", row.names = c(NA, -7L))
于 2016-06-30T12:02:02.347 回答