我有這樣一個數據幀:轉換的數據幀,這樣列出每一個獨特的交易變成了單行
trans_id product_id
1 1 456
2 4 223
3 1 778
4 1 774
5 5 999
6 4 123
我需要將其轉換使所有TRANS_ID被列爲單列這樣的:
trans_id V1 V2 V3
1 456 778 774
4 223 123
5 999
我有這樣一個數據幀:轉換的數據幀,這樣列出每一個獨特的交易變成了單行
trans_id product_id
1 1 456
2 4 223
3 1 778
4 1 774
5 5 999
6 4 123
我需要將其轉換使所有TRANS_ID被列爲單列這樣的:
trans_id V1 V2 V3
1 456 778 774
4 223 123
5 999
您應該添加輔助ID列。從我的「splitstackshape」包中獲取getanID
很容易。由於「splitstackshape」還加載「data.table」,很容易然後使用dcast.data.table
轉換爲寬幅:
library(splitstackshape)
dcast.data.table(
getanID(mydf, "trans_id"),
trans_id ~ .id, value.var = "product_id")
# trans_id 1 2 3
# 1: 1 456 778 774
# 2: 4 223 123 NA
# 3: 5 999 NA NA
相當於「dplyr」 +「tidyr」的做法是這樣的:
library(dplyr)
library(tidyr)
mydf %>%
group_by(trans_id) %>%
mutate(id = sequence(n())) %>%
spread(id, product_id)
隨着tidyr
library(tidyr)
t(df %>% spread(trans_id, product_id))
+1 @Ananda Mahto答案tidy
和dplyr
一個基礎R的選擇是
reshape(transform(df, N= ave(trans_id, trans_id, FUN=seq_along)),
idvar='trans_id', timevar='N', direction='wide')
# trans_id product_id.1 product_id.2 product_id.3
#1 1 456 778 774
#2 4 223 123 NA
#5 5 999 NA NA
真棒......完美的作品!謝謝! – Cybernetic