我有一个看起来像这样的数据集:
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
。
任何帮助将不胜感激。
答案 0 :(得分: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")