基于R中变量及其值的不同组合生成唯一的拼写编号
下面提供了一个示例数据集:基于R中变量及其值的不同组合生成唯一的拼写编号,r,dplyr,R,Dplyr,下面提供了一个示例数据集: fact_code line_code date style run_rank style_spell 1206 1206029 2017-04-05 283674d 1 1 1206 1206029 2017-04-06 283674d 2 0 ... ... ... ... ...
fact_code line_code date style run_rank style_spell
1206 1206029 2017-04-05 283674d 1 1
1206 1206029 2017-04-06 283674d 2 0
... ... ... ... ... ...
1206 1206029 2017-04-18 283674d 7 0
1206 1206046 2017-05-01 283674d 1 1
1206 1206046 2017-05-15 283674d 2 1
... ... ... ... ... ...
1206 1206046 2017-05-21 283674d 7 0
... ... ... ... ... ...
1222 1222003 2017-09-11 65654 1 1
... ... ... ... ... ...
1222 1222003 2017-09-19 65654 8 0
dput输出不带。。。是:
变量fact_code代表服装工厂代码,line_code代表工厂代码,style是该生产线在给定日期生产的服装样式的字符变量,run_rank代表生产日期的排名。style_spell是一个指示符变量,其值为1,表示工厂生产线开始为特定服装样式生产新的拼写,否则为0
我想创建一个新变量spell_num,它指示工厂生产线正在生产的样式的当前拼写编号。因此,变量如下所示:
fact_code line_code date style run_rank style_spell spell_num
1206 1206029 2017-04-05 283674d 1 1 1
1206 1206029 2017-04-06 283674d 2 0 1
... ... ... ... ... ... ...
1206 1206029 2017-04-18 283674d 7 0 1
1206 1206046 2017-05-01 283674d 1 1 1
1206 1206046 2017-05-15 283674d 2 1 2
... ... ... ... ... ... ...
1206 1206046 2017-05-21 283674d 7 0 2
... ... ... ... ... ... ...
1222 1222003 2017-09-11 65654 1 1 1
... ... ... ... ... ... ...
1222 1222003 2017-09-19 65654 8 0 1
对于产生给定样式的给定工厂生产线生产线代码,在第一个生产日,其变量spell_num的值为1,因此,新拼写开始时,即run_rank=1,指示变量style_spell的值为1。例如,在第一行中,第1206029行首先在2017-04-05开始生成样式283674d,因此,style_spell和spell_num都等于1
从下一个后续日期/生产日开始,即运行等级>=2,变量样式拼写的值更改为0
但是,对于给定的线条和样式,拼写值假定为1,直到样式拼写再次变为1为止。这可以通过两种方式实现。首先,如果我们有一条生产相同款式的新工厂生产线,例如1206046生产线在2017-04-18开始生产283674d款式,而1206029生产线在第7天结束生产
或者当同一行在中断两周后重新生成样式时。例如,第1206046行有两个咒语;第一次拼写发生在283674d样式的第一个生产日,即2017-05-01,样式拼写=1,因此对应于运行等级=1。2017年5月15日,第1206046行的第二个咒语开始时,咒语_num的值从1变为2,表示两周过去了,该行现在处于第二个咒语中,产生了该特定样式
变量spell_num现在将假定该值为2,除非该样式的制作过程中有两周的中断或中断,或者当一条新生产线开始生产相同或不同的新样式时
我一直在尝试使用以下代码生成此预期变量:
dplyr::filter(style_spell == 1) %>%
dplyr::select(fact_code, line_code, date, style, run_rank, Diff, Diff_max, style_multi, style_spell)
代码可以分为两个阶段,在第一阶段中,我尝试创建一个style_spell=1的数据子集。在对子集进行操作之后,我的计划是将在该子集上创建的变量合并到主数据df中
然而,我没有得到预期的结果。此外,我希望有一个代码可以在一步中创建变量,即使用主数据df,而不是对其子集进行操作 任何帮助都将不胜感激 谢谢您的dput,这使它更简单了 据我所知,这就是你想要的:
df %>%
group_by(fact_code, line_code, style) %>%
mutate(my_answer = cumsum(style_spell))
# # A tibble: 8 x 8
# # Groups: fact_code, line_code, style [3]
# fact_code line_code date style run_rank style_spell spell_num my_answer
# <int> <int> <chr> <chr> <int> <int> <int> <int>
# 1 1206 1206029 05/04/2017 283674d 1 1 1 1
# 2 1206 1206029 06/04/2017 283674d 2 0 1 1
# 3 1206 1206029 18/04/2017 283674d 7 0 1 1
# 4 1206 1206046 01/05/2017 283674d 1 1 1 1
# 5 1206 1206046 15/05/2017 283674d 2 1 2 2
# 6 1206 1206046 21/05/2017 283674d 7 0 2 2
# 7 1222 1222003 11/09/2017 65654 1 1 1 1
# 8 1222 1222003 19/09/2017 65654 8 0 1 1
我不是百分之百确定这种风格应该在小组里。从您的描述中我真的看不出来,对于小样本数据来说,这没有什么区别。但是,我没有得到预期的结果。您能否更具体地说明结果与您的意图之间的差异?此外,您能否以更好的格式提供示例数据?所有的。。。让输入变得烦人。也许与dput共享一些可复制/粘贴的数据以补充表格,其中。。。将意义传达给人类,但不传达给R。我得到的拼写_num的值是所有行的1。相反,它应该假设第二个数据帧中列出的值。另外,我已经从R复制并粘贴了dput。请注意,我已经排除了…我已经尝试了您的代码,并且工作得非常优雅!这正是我想要的。
dplyr::filter(style_spell == 1) %>%
dplyr::select(fact_code, line_code, date, style, run_rank, Diff, Diff_max, style_multi, style_spell)
dplyr::group_by(line_code, date, style, run_rank) %>%
dplyr::mutate(style_spell_num = row_number())
df %>%
group_by(fact_code, line_code, style) %>%
mutate(my_answer = cumsum(style_spell))
# # A tibble: 8 x 8
# # Groups: fact_code, line_code, style [3]
# fact_code line_code date style run_rank style_spell spell_num my_answer
# <int> <int> <chr> <chr> <int> <int> <int> <int>
# 1 1206 1206029 05/04/2017 283674d 1 1 1 1
# 2 1206 1206029 06/04/2017 283674d 2 0 1 1
# 3 1206 1206029 18/04/2017 283674d 7 0 1 1
# 4 1206 1206046 01/05/2017 283674d 1 1 1 1
# 5 1206 1206046 15/05/2017 283674d 2 1 2 2
# 6 1206 1206046 21/05/2017 283674d 7 0 2 2
# 7 1222 1222003 11/09/2017 65654 1 1 1 1
# 8 1222 1222003 19/09/2017 65654 8 0 1 1