R 数据清理-在列之间移动数据

R 数据清理-在列之间移动数据,r,dplyr,R,Dplyr,在下面的dataframe示例中,我正在寻找一种方法,在v9列包含“a”时,从第v2列开始向右移动值,同时用零替换间隙 set.seed(0) df <- matrix(sample(c("a", 1:3), 100, replace = TRUE), nrow=10) colnames(df) <- c(paste0("v", 1:10)) df <- as_tibble(df) df$v11 <- 0 # A tibble: 10 x 11 v1

在下面的dataframe示例中,我正在寻找一种方法,在v9列包含“a”时,从第v2列开始向右移动值,同时用零替换间隙

set.seed(0)
df <- matrix(sample(c("a", 1:3), 100, replace = TRUE), nrow=10) 
colnames(df) <- c(paste0("v", 1:10))
df <- as_tibble(df)
df$v11 <- 0

# A tibble: 10 x 11
      v1    v2    v3    v4    v5    v6    v7    v8    v9   v10   v11
   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
 1     3     a     3     1     1     2     1     3     3     a     0
 2     1     a     3     1     3     1     3     1     1     a     0
 3     1     a     a     2     2     3     1     3     2     a     0
 4     2     2     2     1     3     1     1     1     1     2     0
 5     3     1     a     a     2     a     1     1     1     3     0
 6     a     3     1     3     2     a     2     1     3     3     0
 7     3     1     1     2     3     a     1     3     a     3     0
 8     3     2     a     3     a     1     1     3     2     1     0
 9     2     3     1     a     1     2     3     1     a     1     0
10     2     1     3     2     2     2     a     3     a     3     0
req_rows <- which(df$v9 == "a")
req_rows
[1]  7  9 10

首先,获取
v9
列包含“a”的所有行

set.seed(0)
df <- matrix(sample(c("a", 1:3), 100, replace = TRUE), nrow=10) 
colnames(df) <- c(paste0("v", 1:10))
df <- as_tibble(df)
df$v11 <- 0

# A tibble: 10 x 11
      v1    v2    v3    v4    v5    v6    v7    v8    v9   v10   v11
   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
 1     3     a     3     1     1     2     1     3     3     a     0
 2     1     a     3     1     3     1     3     1     1     a     0
 3     1     a     a     2     2     3     1     3     2     a     0
 4     2     2     2     1     3     1     1     1     1     2     0
 5     3     1     a     a     2     a     1     1     1     3     0
 6     a     3     1     3     2     a     2     1     3     3     0
 7     3     1     1     2     3     a     1     3     a     3     0
 8     3     2     a     3     a     1     1     3     2     1     0
 9     2     3     1     a     1     2     3     1     a     1     0
10     2     1     3     2     2     2     a     3     a     3     0
req_rows <- which(df$v9 == "a")
req_rows
[1]  7  9 10

req\u行首先,获取
v9
列包含“a”的所有行

set.seed(0)
df <- matrix(sample(c("a", 1:3), 100, replace = TRUE), nrow=10) 
colnames(df) <- c(paste0("v", 1:10))
df <- as_tibble(df)
df$v11 <- 0

# A tibble: 10 x 11
      v1    v2    v3    v4    v5    v6    v7    v8    v9   v10   v11
   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
 1     3     a     3     1     1     2     1     3     3     a     0
 2     1     a     3     1     3     1     3     1     1     a     0
 3     1     a     a     2     2     3     1     3     2     a     0
 4     2     2     2     1     3     1     1     1     1     2     0
 5     3     1     a     a     2     a     1     1     1     3     0
 6     a     3     1     3     2     a     2     1     3     3     0
 7     3     1     1     2     3     a     1     3     a     3     0
 8     3     2     a     3     a     1     1     3     2     1     0
 9     2     3     1     a     1     2     3     1     a     1     0
10     2     1     3     2     2     2     a     3     a     3     0
req_rows <- which(df$v9 == "a")
req_rows
[1]  7  9 10
req_行
df[df$v9=='a',粘贴('v',2:11,sep=”“)]%
选择(v2:v11)%>%
过滤器(v9=='a')%>%
t()%>%
滞后(默认值为0)%>%
t()%>%
作为_tible()
df[df$v9=='a',粘贴('v',2:11,sep=”“)]%
选择(v2:v11)%>%
过滤器(v9=='a')%>%
t()%>%
滞后(默认值为0)%>%
t()%>%
作为_tible()
df[df$v9=='a',paste('v',2:11,sep = "")] <-
                                    df%>%
                                    select(v2:v11)%>%
                                     filter(v9=='a')%>%
                                      t()%>%
                                    lag(default = 0)%>%
                                       t()%>%
                                      as_tibble()