Объединить столбцы dataframe со всеми комбинациями переменных - PullRequest
0 голосов
/ 23 февраля 2019
 "w" "n" 
    "1" 2 1 
    "2" 3 1 
    "3" 4 1 
    "4" 2 1 
    "5" 5 1 
    "6" 6 1 
    "7" 3 2 
    "8" 7 2 

Я попробовал следующую команду, но не показал никаких изменений, как я ожидал.

w2 <- w1 %>%
expand(w,n)

Мой вывод должен выглядеть следующим образом

w n 
2 1  
2 2  
3 1  
3 2  
4 1  
4 2  
5 1  
5 2  
6 1  
6 2  
7 1 
7 2 

data

w1 <- structure(list(w = c(2L, 3L, 3L, 4L, 5L, 6L, 7L), n = c(1L, 1L, 
2L, 1L, 1L, 1L, 2L)), .Names = c("w", "n"), row.names = c(NA, 
-7L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), groups = structure(list(
    w = c(2L, 3L, 3L, 4L, 5L, 6L, 7L), n = c(1L, 1L, 2L, 1L, 
    1L, 1L, 2L), .rows = list(1L, 2L, 3L, 4L, 5L, 6L, 7L)), .Names = c("w", 
"n", ".rows"), row.names = c(NA, -7L), class = c("tbl_df", "tbl", 
"data.frame"), .drop = TRUE))

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Проблема была в сгруппированном фрейме данных, рассмотрим:

w1 %>% 
  ungroup() %>%
  expand(w, n)

Вывод:

# A tibble: 12 x 2
       w     n
   <int> <int>
 1     2     1
 2     2     2
 3     3     1
 4     3     2
 5     4     1
 6     4     2
 7     5     1
 8     5     2
 9     6     1
10     6     2
11     7     1
12     7     2
0 голосов
/ 23 февраля 2019

Используя исходный фрейм данных df, вы можете создать новый фрейм данных, который копирует w для каждого уникального значения n:

data.frame(w = rep(unique(df$w), 
                   each = uniqueN(df$n)),
           n = rep(unique(df$n),
                   times = uniqueN(df$w)))

Вывод:

   w n
1  2 1
2  2 2
3  3 1
4  3 2
5  4 1
6  4 2
7  5 1
8  5 2
9  6 1
10 6 2
11 7 1
12 7 2
0 голосов
/ 23 февраля 2019

Мы можем использовать complete из tidyr.

library(dplyr)
library(tidyr)

dat2 <- dat %>%
  distinct(w, .keep_all = TRUE) %>%
  complete(w, n) 
dat2
# # A tibble: 12 x 2
#        w     n 
#    <int> <int>
#  1     2     1
#  2     2     2
#  3     3     1
#  4     3     2
#  5     4     1
#  6     4     2
#  7     5     1
#  8     5     2
#  9     6     1
# 10     6     2
# 11     7     1
# 12     7     2

ДАННЫЕ

dat <- read.table(text = "w n 
                  2 1 
                  3 1 
                  4 1 
                  2 1 
                  5 1 
                  6 1 
                  3 2 
                  7 2",
                  header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...