J'ai actuellement des données sur lesquelles les gens ont répondu aux questions sur un comportement. Certaines questions constituent une déclaration globale sur le comportement passé et actuel (la condition) et d'autres questions posées sur le comportement en réponse à un certain cadrage de questions (condition X et Y).
Je veux fusionner ces lignes alors j'ai deux rangées pour chaque participant
J'ai essayé plusieurs solutions de regroupement et je ne peux pas sembler obtenir cela pour travailler. A également regardé ces réponses:
Et ni aucun de ces travaillaient non plus.
Exemple de code ci-dessous. Appréciez toute aide car pour le moment je suis réduit à copier-coller dans Excel qui n'est pas idéal.
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
Considérons un groupe par fill
, puis filter
sorti de la ligne "à la fois"
library(dplyr)
library(tidyr)
out <- a %>%
group_by(id) %>%
fill(belief:willing, .direction = "downup") %>%
ungroup %>%
filter(condition != 'both')
-vérification
> identical(out, b)
[1] TRUE