【问题标题】:Mimicking _n in Stata to generate a dummy variable in R [duplicate]在Stata中模仿_n以在R中生成一个虚拟变量[重复]
【发布时间】:2018-07-17 18:28:07
【问题描述】:

我有一个如下所示的数据集:

fact_code style_serial
1004      style_101
1004      style_101
1004      style_101
1004      style_102
1004      style_102
1004      style_102
5002      style_101
5002      style_101
5002      style_101
5002      style_102
5002      style_102
5002      style_102

其中fact_code是工厂代码,style_serial是工厂生产的服装款式的序列号。我要生成的是一个变量,ss,看起来像这样:

fact_code style_serial ss
1004      style_101    1
1004      style_101    0
1004      style_101    0
1004      style_102    1
1004      style_102    0
1004      style_102    0
5002      style_101    1
5002      style_101    0
5002      style_101    0
5002      style_102    1
5002      style_102    0
5002      style_102    0

基本上这个变量ss可以通过Stata代码生成如下:

bysort fact_code style_serial: gen ss=_n==1

_n 是当前观测编号的 Stata 符号。

但我正在尝试使用 R 生成相同的虚拟变量ss,但不断出现错误。这些是我试图模仿上述 Stata 代码的 R 代码:

mydf <- mydf %>% 
  group_by(fact_code, style_serial) %>% 
  mutate(ss = n_distinct(fact_code, style_serial))

mydf <- mydf %>% group_by(fact_code, style_serial) %>% 
  mutate(ss =  ave(mydf$fact_code, mydf$style_serial, FUN = seq_along))

R 数据框的名称是mydf

任何帮助将不胜感激。

【问题讨论】:

  • mutate(s = as.integer(row_number() == 1L))?不过,我想这在 R 中不如在 Stata 中有用。
  • 谢谢!这非常有效!

标签: r dataframe stata tidyverse


【解决方案1】:

你可以使用duplicated()

df1$ss <- with(df1, ifelse(duplicated(df1), 0, 1))

产量

> df1
   fact_code style_serial ss
1       1004    style_101  1
2       1004    style_101  0
3       1004    style_101  0
4       1004    style_102  1
5       1004    style_102  0
6       1004    style_102  0
7       5002    style_101  1
8       5002    style_101  0
9       5002    style_101  0
10      5002    style_102  1
11      5002    style_102  0
12      5002    style_102  0

数据

df1 <- read.table(header=TRUE, text="fact_code style_serial
1004      style_101
                  1004      style_101
                  1004      style_101
                  1004      style_102
                  1004      style_102
                  1004      style_102
                  5002      style_101
                  5002      style_101
                  5002      style_101
                  5002      style_102
                  5002      style_102
                  5002      style_102")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多