如何为 R 中的列中的每个唯一值创建一个虚拟对象
How to create a dummy for every unique value in a column in R
我想为 R 中的列中的每个唯一值创建虚拟变量。
我的数据:
想要o/p:
非常感谢任何帮助。
提前致谢。
dcast
来自包 reshape2
.
df <- dcast(id ~sku_name,fun.aggregate="length")
您可以创建一个虚拟列并使用 tidyr
中的 pivot_wider
:
library(dplyr)
df %>%
mutate(n = 1) %>%
select(-sku_id) %>%
tidyr::pivot_wider(names_from = sku_name, values_from = n,
names_prefix = 'sku_', values_fill = list(n = 0))
# id sku_Google sku_AMZ sku_FK sku_AB sku_JIOMART sku_CLIQ sku_AMART
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 1 0 1 1 0 0 0
#2 2 0 1 0 0 1 0 0
#3 3 0 0 0 0 0 1 0
#4 4 0 0 0 0 0 0 1
数据
df <- data.frame(id = c(1, 2, 1, 1:4), sku_id = c(234,345,213,233, 456, 678,657),
sku_name = c('Google', 'AMZ', 'FK', 'AB', 'JIOMART', 'CLIQ', 'AMART'))
基础 R 解决方案:
xtabs( ~ id + sku_name, df1)
# sku_name
#id AB AMART AMZ CLIQ FK GOOGLE JIOMART
# 1 1 0 0 0 1 1 0
# 2 0 0 1 0 0 0 1
# 3 0 0 0 1 0 0 0
# 4 0 1 0 0 0 0 0
数据.
df1 <- data.frame(id = c(1,2,1,1,2,3,4),
sku_id = c(234, 345, 213, 233, 456, 678, 657),
sku_name = c("GOOGLE", "AMZ", "FK", "AB", "JIOMART", "CLIQ", "AMART"))
我想为 R 中的列中的每个唯一值创建虚拟变量。
我的数据:
想要o/p:
非常感谢任何帮助。
提前致谢。
dcast
来自包 reshape2
.
df <- dcast(id ~sku_name,fun.aggregate="length")
您可以创建一个虚拟列并使用 tidyr
中的 pivot_wider
:
library(dplyr)
df %>%
mutate(n = 1) %>%
select(-sku_id) %>%
tidyr::pivot_wider(names_from = sku_name, values_from = n,
names_prefix = 'sku_', values_fill = list(n = 0))
# id sku_Google sku_AMZ sku_FK sku_AB sku_JIOMART sku_CLIQ sku_AMART
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 1 0 1 1 0 0 0
#2 2 0 1 0 0 1 0 0
#3 3 0 0 0 0 0 1 0
#4 4 0 0 0 0 0 0 1
数据
df <- data.frame(id = c(1, 2, 1, 1:4), sku_id = c(234,345,213,233, 456, 678,657),
sku_name = c('Google', 'AMZ', 'FK', 'AB', 'JIOMART', 'CLIQ', 'AMART'))
基础 R 解决方案:
xtabs( ~ id + sku_name, df1)
# sku_name
#id AB AMART AMZ CLIQ FK GOOGLE JIOMART
# 1 1 0 0 0 1 1 0
# 2 0 0 1 0 0 0 1
# 3 0 0 0 1 0 0 0
# 4 0 1 0 0 0 0 0
数据.
df1 <- data.frame(id = c(1,2,1,1,2,3,4),
sku_id = c(234, 345, 213, 233, 456, 678, 657),
sku_name = c("GOOGLE", "AMZ", "FK", "AB", "JIOMART", "CLIQ", "AMART"))