Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为流程中跳过的阶段添加行_R_Dataframe_Analytics - Fatal编程技术网

R 为流程中跳过的阶段添加行

R 为流程中跳过的阶段添加行,r,dataframe,analytics,R,Dataframe,Analytics,我希望在R中获取一个数据帧,并根据我在两列V1和V2中看到的内容对其进行扩充。简而言之,我有S1-S6阶段,它们是字符串 对于阶段中有间隙的每一行,我需要添加行。看看下面的数据帧,如果我在同一行看到'S 3'和'S 3',我就不需要做任何事情了。同样,如果我在同一行看到'S 3'和'S 4',我也不需要做任何事情 例1 输入: ---------------------------------- |Var1 | V1 | V2 | -----------

我希望在R中获取一个数据帧,并根据我在两列V1和V2中看到的内容对其进行扩充。简而言之,我有S1-S6阶段,它们是字符串

对于阶段中有间隙的每一行,我需要添加行。看看下面的数据帧,如果我在同一行看到'S 3'和'S 3',我就不需要做任何事情了。同样,如果我在同一行看到'S 3'和'S 4',我也不需要做任何事情

例1 输入:

----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 2' |'S 5'|
----------------------------------
----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 5' |'S 3'|
----------------------------------
输出:

----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 2' |'S 3'|
----------------------------------
|0060a00000fUbAnAAK |'S 3' |'S 4'|
----------------------------------
|0060a00000fUbAnAAK |'S 4' |'S 5'|
----------------------------------
----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 5' |'S 4'|
----------------------------------
|0060a00000fUbAnAAK |'S 4' |'S 3'|
----------------------------------
例2 输入:

----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 2' |'S 5'|
----------------------------------
----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 5' |'S 3'|
----------------------------------
输出:

----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 2' |'S 3'|
----------------------------------
|0060a00000fUbAnAAK |'S 3' |'S 4'|
----------------------------------
|0060a00000fUbAnAAK |'S 4' |'S 5'|
----------------------------------
----------------------------------
|Var1               | V1   | V2  |    
----------------------------------
|0060a00000fUbAnAAK |'S 5' |'S 4'|
----------------------------------
|0060a00000fUbAnAAK |'S 4' |'S 3'|
----------------------------------

使用
tidyverse
的一个想法是将数字转换为长格式,将数字从
S
中分离出来并完成序列。一旦我们有了它,我们就将列重新粘贴在一起(
S
),并转换回宽格式。最后,我们取滞后变量
V1
,并删除
NA
s,即

library(tidyverse)

df %>% 
 gather(var, val, -1) %>% 
 separate(val, into = c('char', 'number'), sep = ' ') %>% 
 mutate(number = as.numeric(number)) %>% 
 complete(nesting(var, Var1, char), number = full_seq(min(number):max(number), 1)) %>%
 unite('V1_2', c('char', 'number'), sep = ' ') %>% 
 group_by(var) %>% 
 mutate(new = row_number()) %>% 
 spread(var, V1_2) %>% 
 mutate(V1 = lag(V1)) %>% 
 na.omit() %>% 
 select(-new)
这就给了,

#一个tible:3 x 3
Var1 V1 V2
1 xxx S 2 S 3
2 xxx S 3 S 4
3xxx s4s5
最新答案 此更新还考虑了递减阶段

样本数据

library(data.table)
DT <- fread("Var1               | V1   | V2
  0060a00000fUbAnAAK |S 2 |S 5
  0060a00000fUbAnAAK_ |S 5 |S 3")

#                   Var1  V1  V2
# 1:  0060a00000fUbAnAAK S 2 S 5
# 2: 0060a00000fUbAnAAK_ S 5 S 3
先前的答复
`data.table`解决方案
**样本数据**
库(数据表)

DT update alse处理问题例2中提供的递减阶段