r语言 - 改变列以获得唯一值,转置另一列并添加这些唯一值的百分比



我有一个数据集,我有一个子集,看起来像这样

<表类> 项目 代码比例tbody><<tr>100001230.2100011340.98100011520.02100021230.68100031231100021780.32100041891

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.table
library(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

相关内容

  • 没有找到相关文章

最新更新