Изменение структуры данных в R с помощью разделителя - PullRequest
0 голосов
/ 26 октября 2018

Мой набор входных данных:

df1 = data.frame (Var_A = c ('A, B', 'C'), Var_B = c ('1,2', '2'))

Желаемый результат:

df2 = data.frame (Var_A = c ('A', 'A', 'B', 'B', 'C'), Var_B = c («1», «2», «1», «2», «2»))

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Я придумал base метод:

cut <- apply(df1, 1, function(x){
  expand.grid(strsplit(x, ","))
})

cut

# [[1]]
#   Var_A Var_B
# 1     A     1
# 2     B     1
# 3     A     2
# 4     B     2
#
# [[2]]
#   Var_A Var_B
# 1     C     2

Reduce(rbind, cut)

#   Var_A Var_B
# 1     A     1
# 2     B     1
# 3     A     2
# 4     B     2
# 5     C     2
0 голосов
/ 26 октября 2018

Мы можем использовать cSplit

library(splitstackshape)
library(dplyr)
cSplit(df1, "Var B", ",", "long") %>%
    cSplit(., "Var A", ",", "long")

Или с separate_rows

library(tidyr)
separate_rows(df1, "Var B", convert = TRUE) %>%
      separate_rows("Var A") %>%
      arrange(`Var A`)
#   Var A Var B
#1     A     1
#2     A     2
#3     B     1
#4     B     2
#5     C     2

Данные

df1 <- structure(list(`Var A` = c("A,B", "C"), `Var B` = c("1,2", "2"
 )), class = "data.frame", row.names = c(NA, -2L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...