R 如何从现有数据中形成一个新的数据框架,每个类别具有前3个值
假设我有一个如下的数据R 如何从现有数据中形成一个新的数据框架,每个类别具有前3个值,r,R,假设我有一个如下的数据 PRODUCT SUPERMARKET PRICE Bean Adonis 87 Bean Rodunia 66 Bean Chausia 43 Bean Emynia 43 Butter Ranucia 74 Butter Adonis 60 Coca-Cola Emynia 84 Coca-Cola
PRODUCT SUPERMARKET PRICE
Bean Adonis 87
Bean Rodunia 66
Bean Chausia 43
Bean Emynia 43
Butter Ranucia 74
Butter Adonis 60
Coca-Cola Emynia 84
Coca-Cola Chausia 61
Coca-Cola Serisia 35
我需要以下表格中的数据
PRODUCT SUPERMARKET 1 SUPERMARKET 2 SUPERMARKET 3
Bean Adonis Rodunia Chausia
Butter Ranucia Adonis NA
Coca-Cola Emynia Chausia Serisia
原始数据的大小很大,因此使用for循环会带来性能问题。有人能帮忙吗我们可以用
tidyverse
来做这件事
library(tidyverse)
df1 %>%
group_by(PRODUCT) %>%
top_n(3, wt = PRICE) %>%
mutate(val = paste0("SUPERMARKET_", row_number())) %>%
filter(row_number()<=3) %>%
select(-PRICE) %>%
spread(val, SUPERMARKET)
# A tibble: 3 × 4
# Groups: PRODUCT [3]
# PRODUCT SUPERMARKET_1 SUPERMARKET_2 SUPERMARKET_3
#* <chr> <chr> <chr> <chr>
#1 Bean Adonis Rodunia Chausia
#2 Butter Ranucia Adonis <NA>
#3 Coca-Cola Emynia Chausia Serisia
库(tidyverse)
df1%>%
组别(产品)%>%
顶部(3,重量=价格)%>%
变异(val=paste0(“超市”,行号())%>%
过滤器(行号()%
选择(-PRICE)%>%
摊铺(val、超市)
#一个tibble:3×4
#组别:产品[3]
#产品超市1超市2超市3
#*
#1豆荚
#2黄油拉努西亚阿多尼斯
#3可口可乐公司
数据
df1因为这只是样本数据,所以为原始数据创建df1会很麻烦task@aman在这里,我使用了dput
来获取结构。这只是您的示例数据
df1 <- structure(list(PRODUCT = c("Bean", "Bean", "Bean", "Bean", "Butter",
"Butter", "Coca-Cola", "Coca-Cola", "Coca-Cola"), SUPERMARKET = c("Adonis",
"Rodunia", "Chausia", "Emynia", "Ranucia", "Adonis", "Emynia",
"Chausia", "Serisia"), PRICE = c(87L, 66L, 43L, 43L, 74L, 60L,
84L, 61L, 35L)), .Names = c("PRODUCT", "SUPERMARKET", "PRICE"
), class = "data.frame", row.names = c(NA, -9L))