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