如何为R中列中的每个唯一值创建虚拟值

如何为R中列中的每个唯一值创建虚拟值,r,group-by,dummy-variable,R,Group By,Dummy Variable,我想为R中列中的每个唯一值创建虚拟变量 我的数据: 所需o/p: 任何帮助都将不胜感激 提前感谢。dcast来自软件包重塑2 df <- dcast(id ~sku_name,fun.aggregate="length") df您可以创建一个虚拟列,并从tidyr中使用pivot\u-wide: library(dplyr) df %>% mutate(n = 1) %>% select(-sku_id) %>% tidyr::pivot_wider(

我想为R中列中的每个唯一值创建虚拟变量

我的数据:

所需o/p:

任何帮助都将不胜感激


提前感谢。

dcast
来自软件包
重塑2

df <- dcast(id ~sku_name,fun.aggregate="length")

df您可以创建一个虚拟列,并从
tidyr
中使用
pivot\u-wide

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
库(dplyr)
df%>%
突变(n=1)%>%
选择(-sku\U id)%>%
tidyr::pivot\u更宽(名称\u from=sku\u名称,值\u from=n,
名称\前缀='sku',值\填充=列表(n=0))
#id sku_谷歌sku_AMZ sku_FK sku_AB sku_JIOMART sku_CLIQ sku_AMART
#                               
#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'))
dfBase 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"))

df1嘿,Kiran u,欢迎,看看如何创建更好的问题:-)。这能回答你的问题吗?我已向上投票,但请更正:
dcast(data=df1,id~sku\u name,fun.aggregate=length)