Есть ли проблема с MAP в кодах в R - PullRequest
1 голос
/ 18 февраля 2020

У меня большая база данных, и я не могу их здесь создать. У меня есть две базы данных данных следующим образом.

df1 <- read.table(text="A1  B1  C1  D1  E1
1234Z   721 224 223 987L
224 321 224 331 987L
321 321 224 441 141
321 440 456Y    331 141
321 1234Q   456Y    441 321
218 221 456Y    12A 321
218 440 19  223 321
161 1234Q   19  12A 123Q
1234Z   123Q    77  11A 123Q", header=TRUE)

df2 <- read.table(text=" BCG1   BCG2    BCG3    BCG4    BCG5
1   11  13  18  24
4   9   13  19  24
5   9   13  20  22
5   10  14  19  22
5   6   14  20  23
3   8   14  17  23
3   10  12  18  23
2   6   12  17  21
1   7   15  16  21", header=TRUE)

Df1 - это факторы, которые кодируются df2. Я использовал следующий код:

df3 <- do.call(cbind.fill, c(Map(function(x,y)
data.frame(col=x,col2=unique(y)),
lapply(df1,unique),split(df2, col(df2))))
names(df3)<-c(rbind(df1), paste0("Zo", seq_along((df1))))

Я хочу получить следующую таблицу

A1     BCG1   B1      BCG2   C1      BCG3    D1      BCG4    E1      BCG5
1234Z  1      721     11     224     13      223     18      987L    24
224    4      321     9      456Y    14      331     19      141     22
321    5      221     8      19      12      441     20      321     23
218    3      440     10     77      15      12A     17      123Q    21
161    2      1234Q   6                      11A     16     
              123Q    7                     

Я открыт для других кодов. Спасибо за вашу помощь

1 Ответ

1 голос
/ 19 февраля 2020

Попробуйте следующее.

library(dplyr)
library(purrr)

df3 <- c(df1, df2) %>%
  `[`(c(matrix(names(.), nrow = 2, byrow = T))) %>%
  map(~ as.character(unique(.))) %>%
  map_dfc(`[`, 1:max(lengths(.))) %>%
  mutate_all(coalesce, "")

# # A tibble: 6 x 10
#   A1    BCG1  B1    BCG2  C1    BCG3  D1    BCG4  E1    BCG5 
#   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 1234Z 1     721   11    224   13    223   18    987L  24   
# 2 224   4     321   9     456Y  14    331   19    141   22   
# 3 321   5     440   10    19    12    441   20    321   23   
# 4 218   3     1234Q 6     77    15    12A   17    123Q  21   
# 5 161   2     221   8     ""    ""    11A   16    ""    ""   
# 6 ""    ""    123Q  7     ""    ""    ""    ""    ""    ""   

В результате df3 будет tbl объектом, и пустые строки символов будут напечатаны как "" по умолчанию. Если вы не хотите видеть кавычки, есть два варианта:

  1. as.data.frame(df3)
  2. print.data.frame(df3)

Прежние принуждения df3 от tbl до data.frame и последний не меняет класс объекта.

Результат будет

#      A1 BCG1    B1 BCG2   C1 BCG3  D1 BCG4   E1 BCG5
# 1 1234Z    1   721   11  224   13 223   18 987L   24
# 2   224    4   321    9 456Y   14 331   19  141   22
# 3   321    5   440   10   19   12 441   20  321   23
# 4   218    3 1234Q    6   77   15 12A   17 123Q   21
# 5   161    2   221    8           11A   16          
# 6             123Q    7                  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...