我有一个数据集,我有一个子集,看起来像这样
<表类>
项目
代码比例 tbody><<tr>10000 123 0.2 10001 134 0.98 10001 152 0.02 10002 123 0.68 10003 123 1 10002 178 0.32 10004 189 1 表类>
using
library(tidyverse)
df <- read.table(text = "Item Code Percentage
10000 123 0.2
10001 134 0.98
10001 152 0.02
10002 123 0.68
10003 123 1
10002 178 0.32
10004 189 1", header = T)
pivot_wider(
data = df,
id_cols = Item,
names_from = Code,
values_from = Percentage,
values_fill = 0
)
#> # A tibble: 5 x 6
#> Item `123` `134` `152` `178` `189`
#> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 10000 0.2 0 0 0 0
#> 2 10001 0 0.98 0.02 0 0
#> 3 10002 0.68 0 0 0.32 0
#> 4 10003 1 0 0 0 0
#> 5 10004 0 0 0 0 1
由reprex包(v1.0.0)在2021-02-25创建
使用<<p> strong> data.tablelibrary(data.table)
setDT(df)
dcast(data = df, formula = Item ~ Code, value.var = "Percentage", fill = 0)
#> Item 123 134 152 178 189
#> 1: 10000 0.20 0.00 0.00 0.00 0
#> 2: 10001 0.00 0.98 0.02 0.00 0
#> 3: 10002 0.68 0.00 0.00 0.32 0
#> 4: 10003 1.00 0.00 0.00 0.00 0
#> 5: 10004 0.00 0.00 0.00 0.00 1
由reprex包(v1.0.0)在2021-02-25创建
问题是它需要按'Code'和'Item'进行分组
library(dplyr)
library(tidyr)
df %>%
group_by(Code, Item) %>%
mutate(n = row_number()) %>%
ungroup %>%
spread(Code, Percentage, fill = 0) %>%
select(-n)
与产出
# A tibble: 5 x 6
# Item `123` `134` `152` `178` `189`
# <int> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 10000 0.2 0 0 0 0
#2 10001 0 0.98 0.02 0 0
#3 10002 0.68 0 0 0.32 0
#4 10003 1 0 0 0 0
#5 10004 0 0 0 0 1