【问题标题】:Merge multiple rows in R合并R中的多行
【发布时间】:2022-01-11 21:51:33
【问题描述】:

我目前有一些数据,其中人们回答了有关行为的问题。有些问题是对过去和当前行为的总体陈述(这两个条件),而其他问题是针对特定问题框架(条件 x 和 y)而询问的有关行为的问题。

我想合并这些行,因此每个参与者有两行

  • 一行将有他们对标记为“两者”的条件的所有答案和对条件“x”的答案
  • 另一行将有他们对条件的所有答案都标记为“两者和对条件“y”的答案。

我尝试了几种分组解决方案,但似乎无法让它发挥作用。还看了这些答案:

这些都不起作用。

下面的示例代码。感谢任何帮助,因为目前我只能在 excel 中复制粘贴,这并不理想。

library(tidyverse)
a <- 
  tibble(id = c(rep(1, 3), rep(2,3), rep(3, 3)) , condition = rep(c("both", "x", "y"),3), belief = c(4.8, NA, NA, 3.2, NA, NA, 6.5, NA, NA), past = c(1.8, NA, NA, 4.8, NA, NA, 2.6, NA, NA), current= c(1.8, NA, NA, 3.8, NA, NA, 3.1, NA, NA), feel = c(NA, .6, 1, NA, 2.1, 2.3, NA, 2.6, 1.5), willing = c(NA, 3.6, 205, NA, 2.1, 2.3, NA, 1.3, 0.3))

#what my data currently looks like
a
#> # A tibble: 9 × 7
#>      id condition belief  past current  feel willing
#>   <dbl> <chr>      <dbl> <dbl>   <dbl> <dbl>   <dbl>
#> 1     1 both         4.8   1.8     1.8  NA      NA  
#> 2     1 x           NA    NA      NA     0.6     3.6
#> 3     1 y           NA    NA      NA     1     205  
#> 4     2 both         3.2   4.8     3.8  NA      NA  
#> 5     2 x           NA    NA      NA     2.1     2.1
#> 6     2 y           NA    NA      NA     2.3     2.3
#> 7     3 both         6.5   2.6     3.1  NA      NA  
#> 8     3 x           NA    NA      NA     2.6     1.3
#> 9     3 y           NA    NA      NA     1.5     0.3

b <- 
  tibble(id = c(rep(1, 2), rep(2,2), rep(3, 2)), condition = rep(c("x", "y"),3), belief = c(4.8, 4.8, 3.2, 3.2, 6.5, 6.5), past = c(1.8, 1.8, 4.8, 4.8, 2.6, 2.6), current= c(1.8, 1.8, 3.8, 3.8, 3.1, 3.1), feel = c(.6, 1,  2.1, 2.3, 2.6, 1.5), willing = c( 3.6, 205,  2.1, 2.3,  1.3, 0.3))

#what I want my data to look like
b
#> # A tibble: 6 × 7
#>      id condition belief  past current  feel willing
#>   <dbl> <chr>      <dbl> <dbl>   <dbl> <dbl>   <dbl>
#> 1     1 x            4.8   1.8     1.8   0.6     3.6
#> 2     1 y            4.8   1.8     1.8   1     205  
#> 3     2 x            3.2   4.8     3.8   2.1     2.1
#> 4     2 y            3.2   4.8     3.8   2.3     2.3
#> 5     3 x            6.5   2.6     3.1   2.6     1.3
#> 6     3 y            6.5   2.6     3.1   1.5     0.3

【问题讨论】:

    标签: r dataframe dplyr rows


    【解决方案1】:

    考虑由fill 组成的组,然后将filter 排除在“两者”行之外

    library(dplyr)
    library(tidyr)
    out <- a %>%
       group_by(id) %>% 
       fill(belief:willing, .direction = "downup") %>%
       ungroup %>% 
       filter(condition != 'both')
    

    -检查

    > identical(out, b)
    [1] TRUE
    

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2013-01-24
      • 2021-09-10
      • 2020-09-28
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多