反复移位数据中的变量

时间:2018-06-26 17:08:26

标签: r dplyr

我的数据的一些示例:

humen = {hand:1, eye:2, head:3, hair:4}
puts  "enter any body part name"
internal = gets.chomp.downcase.to_s

body = humen[internal]

puts body

我想用对角线将其移动,以分隔NA和填充数据。 因此,所需的输出如下所示:

library(tidyverse)
set.seed(1234)
df <- tibble(
    v1 = c(1:6),
    v2 = rnorm(6, 5, 2) %>% round,
    v3 = rnorm(6, 4, 2) %>% round,
    v4 = rnorm(6, 4, 1) %>% round %>% lag(1),
    v5 = rnorm(6, 6, 2) %>% round %>% lag(2),
    v6 = rnorm(6, 5, 3) %>% round %>% lag(3),
    v7 = rnorm(6, 5, 3) %>% round %>% lag(4))

     v1    v2    v3    v4    v5    v6    v7

1     1     3     3    NA    NA    NA    NA
2     2     6     3     3    NA    NA    NA
3     3     7     3     4     4    NA    NA
4     4     0     2     5    11     3    NA
5     5     6     3     4     6     1     8
6     6     6     2     3     5     7     4

v3周围的每一列只是上下移动了1、2、3..etc行。

试图在 v1 v2 v3 v4 v5 v6 v7 1 NA NA 3 3 4 3 8 2 NA 3 3 4 11 1 4 3 1 6 3 5 6 7 NA 4 2 7 2 4 5 NA NA 5 3 0 3 4 NA NA NA 6 4 6 2 NA NA NA NA 7 5 6 NA NA NA NA NA 8 6 NA NA NA NA NA NA 中实现此目标,但是我无法使用dplyr::mutate_all()lag()函数对其进行迭代。

编辑:在@wibeasley建议之后,我做了这个

lead()

看起来很丑,但是行得通。

1 个答案:

答案 0 :(得分:1)

我们可以使用lapply处理每一列,将NA放在后面。

df[] <- lapply(df, function(x) c(x[!is.na(x)], x[is.na(x)]))
df
# # A tibble: 6 x 7
#      v1    v2    v3    v4    v5    v6    v7
#   <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     1     3     3     3     4     3     8
# 2     2     6     3     4    11     1     4
# 3     3     7     3     5     6     7    NA
# 4     4     0     2     4     5    NA    NA
# 5     5     6     3     3    NA    NA    NA
# 6     6     6     2    NA    NA    NA    NA