R 变异列以获得唯一值,转置另一列并添加这些唯一值的百分比
我有一个数据集,我有一个子集,如下所示: 项目 代码 百分比 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.R 变异列以获得唯一值,转置另一列并添加这些唯一值的百分比,r,dplyr,tidyr,plyr,mutate,R,Dplyr,Tidyr,Plyr,Mutate,我有一个数据集,我有一个子集,如下所示: 项目 代码 百分比 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. 使用tidyverse 库(tidyverse) df#A tible:5 x 6 #>项目'123``134``152``178``189` #> #> 1 10000 0.2 0 0 0
使用tidyverse
库(tidyverse)
df#A tible:5 x 6
#>项目'123``134``152``178``189`
#>
#> 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
由(v1.0.0)于2021年2月25日创建
使用数据表
库(data.table)
setDT(df)
dcast(数据=df,公式=Item~Code,value.var=“百分比”,填充=0)
#>项目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
由(v1.0.0)于2021年2月25日使用tidyverse创建
库(tidyverse)
df#A tible:5 x 6
#>项目'123``134``152``178``189`
#>
#> 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
由(v1.0.0)于2021年2月25日创建
使用数据表
库(data.table)
setDT(df)
dcast(数据=df,公式=Item~Code,value.var=“百分比”,填充=0)
#>项目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
由(v1.0.0)于2021年2月25日创建,问题是它需要按“代码”和“项目”进行分组
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
#一个tible:5 x 6
#项目'123``134``152``178``189`
#
#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
问题是它需要同时按“代码”和“项目”进行分组
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
#一个tible:5 x 6
#项目'123``134``152``178``189`
#
#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
plyr已经退休几年了。您可以使用tidyr实现这一点,它还将语法从spread
更新为pivot\u-wider
。在同一个任务中有很多问题;我会挖一些来回答你的问题吗?也看看大家好!非常感谢你的帮助!这两种选择对我来说都很容易!真的很感激!:)plyr已经退休几年了。您可以使用tidyr实现这一点,它还将语法从spread
更新为pivot\u-wider
。在同一个任务中有很多问题;我会挖一些来回答你的问题吗?也看看大家好!非常感谢你的帮助!这两种选择对我来说都很容易!真的很感激!:)