扩展数据行

Expanding rows of data

我在扩展数据框的行时遇到了问题。我在 dplyr 链中从 tidyr 尝试了 expand。关键是这个函数似乎是在扩展数据,但是通过改变不需要的扩展元素的顺序。我想在展开后保持 sp 列的顺序。

这是我的尝试

df <- data.frame(label1=letters[1:6],label2=letters[7:12])

sp <- c(-1,0,seq(0.1,0.5,0.1),seq(-2,-2.5,-0.1),seq(0.1,0.5,0.1))
sp
#     [1] -1.0  0.0  0.1  0.2  0.3  0.4  0.5 -2.0 -2.1 -2.2 -2.3 -2.4 -2.5  0.1  0.2  0.3  0.4  0.5


library(dplyr)
library(tidyr)

    expanded <- df%>%
      expand(df,sp)

> head(expanded)
  label1 label2   sp
1      a      g -2.5
2      a      g -2.4
3      a      g -2.3
4      a      g -2.2
5      a      g -2.1
6      a      g -2.0

我想根据 sp 顺序扩展 df。我们该怎么做?

预期输出

label1 label2   sp
1       a      g -1.0
2       a      g  0.0
3       a      g  0.1
4       a      g  0.2
5       a      g  0.3
6       a      g  0.4
7       a      g  0.5
8       a      g  -2
9       a      g  -2.1
10      a      g  -2.2
11      a      g  -2.3
12      a      g  -2.4
13      a      g  -2.5
14      b      h  -1.0
15      b      h   0.0
16      b      h   0.1

等等

我们可以在全局环境中match列'sp'和向量sp进行排序

r1 <- df %>%
         expand(df, sp) %>%
         arrange(label1, label2, match(sp, unique(.GlobalEnv$sp)))
dim(r1)
#[1] 78  3


identical(unique(r1$sp), unique(sp))
#[1] TRUE

更新

如果 'sp' vector 中有重复项并且我们希望对所有值进行 expand,一种选择是对 [=14] 的序列进行扩展=] 然后更改值

r2 <- df %>%
        expand(df, sp=seq_along(sp)) %>% 
        mutate(sp = .GlobalEnv$sp[sp])


dim(r2)
#[1] 108   3

head(r2, length(sp))
#    label1 label2   sp
# 1       a      g -1.0
# 2       a      g  0.0
# 3       a      g  0.1
# 4       a      g  0.2
# 5       a      g  0.3
# 6       a      g  0.4
# 7       a      g  0.5
# 8       a      g -2.0
# 9       a      g -2.1
# 10      a      g -2.2
# 11      a      g -2.3
# 12      a      g -2.4
# 13      a      g -2.5
# 14      a      g  0.1
# 15      a      g  0.2
# 16      a      g  0.3
# 17      a      g  0.4
# 18      a      g  0.5