dplyr:将信息从一行添加到该列的另一行

时间:2018-01-29 10:59:41

标签: r dataframe dplyr

我正在尝试将信息从数据框中的一行复制到上面的行。目前,我的数据框架如下所示:

                                 word       dur      schwa text

5                                    <NA>   50.0000 FALSE  d
6                            tour de rôle   30.0000  TRUE  @
7                                    <NA>   90.0000 
26                                   <NA>   60.0000 FALSE  d
27                    colonie de vacances   70.0000  TRUE  @
28                                   <NA>   40.0000 FALSE 
                                     <NA>  110.0000 FALSE  d
41                      pantalon de coton   60.0000  TRUE  @
42                                   <NA>   80.0000 FALSE 
43                                   <NA>   90.0000 FALSE 

我想创建一个新的数据框,其中来自列字的信息(总是在text = @中)总是被添加到上面的行中(总是在text = d中)。它应该是这样的:

                                   word       dur   schwa text

5                            tour de rôle   50.0000 FALSE  d
6                            tour de rôle   30.0000  TRUE  @
7                                    <NA>   90.0000 
26                    colonie de vacances   60.0000 FALSE  d
27                    colonie de vacances   70.0000  TRUE  @
28                                   <NA>   40.0000 FALSE 
                        pantalon de coton  110.0000 FALSE  d
41                      pantalon de coton   60.0000  TRUE  @
42                                   <NA>   80.0000 FALSE 
43                                   <NA>   90.0000 FALSE 

我很感激每一个建议。我试图使用mutate-command,但我没有进一步。

提前致谢!

1 个答案:

答案 0 :(得分:0)

将您的输入视为df2

dput(df2)
structure(list(id = c(5L, 6L, 7L, 26L, 27L, 28L, 29L, 41L, 42L, 
43L), word = c(NA, "tour_de_rôle", NA, NA, "colonie_de_vacances", 
NA, NA, "pantalon_de_coton", NA, NA), dur = c(50, 30, 90, 60, 
70, 40, 110, 60, 80, 90), schwa = c(FALSE, TRUE, NA, FALSE, TRUE, 
FALSE, FALSE, TRUE, FALSE, FALSE), text = c("d", "@", NA, "d", 
"@", NA, "d", "@", NA, NA)), .Names = c("id", "word", "dur", 
"schwa", "text"), class = "data.frame", row.names = c(NA, -10L
))

您可以使用tidyverse个功能并尝试:

df2 %>%
  mutate( word = if_else(text == 'd' & lead(text,1) == '@', lead(word,1), word))

甚至,根据给定的示例

,不使用d
df2 %>%
  mutate( word = if_else(is.na(word), lead(word,1), word))

给出:

  id                word dur schwa text
1   5        tour_de_rôle  50 FALSE    d
2   6        tour_de_rôle  30  TRUE    @
3   7                <NA>  90    NA <NA>
4  26 colonie_de_vacances  60 FALSE    d
5  27 colonie_de_vacances  70  TRUE    @
6  28                <NA>  40 FALSE <NA>
7  29   pantalon_de_coton 110 FALSE    d
8  41   pantalon_de_coton  60  TRUE    @
9  42                <NA>  80 FALSE <NA>
10 43                <NA>  90 FALSE <NA>