Как добавить строку и столбец в кадр данных различной длины? - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть два кадра данных различной длины:

Headers <- data.frame(x = paste0("x", 1:4), y = 1:4)
Dataset <- data.frame(H = c(20, 10, 11, 8, 10), W = c(30, 20, 30, 10, 6)) 

Headers
   x y
1 x1 1
2 x2 2
3 x3 3
4 x4 4

Dataset
   H  W
1 20 30
2 10 20
3 11 30
4  8 10
5 10  6

Мне нужно преобразовать столбец «x» из «Заголовки» в заголовок, а столбец «y» - в соответствующие значения, а затем связать с «Набором данных»:

H   W  x1  x2  x3  x4
20  30  1   2   3   4
10  20  1   2   3   4
11  30  1   2   3   4
 8  10  1   2   3   4
10   6  1   2  3    4

Вот код, который я пробовал:

 H <- t(Headers)
 Dataset <- cbind(H, Dataset)
 names(H)  <- NULL
 Dataset <- qpcR:::cbind.na(H, Dataset)

Любая помощь будет оценена. Спасибо

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Вы также можете пойти с базовым R

cbind(Dataset,data.frame(matrix(rep(Headers$y,each=nrow(Dataset)),nrow=nrow(Dataset))))
0 голосов
/ 18 ноября 2018

Переставьте 'y' и повторите до нужного количества строк. Установите имена столбцов в 'x'.

cbind(Dataset, `colnames<-`(t(Headers$y)[rep(1, nrow(Dataset)), ], Headers$x))

   H  W x1 x2 x3 x4
1 20 30  1  2  3  4
2 10 20  1  2  3  4
3 11 30  1  2  3  4
4  8 10  1  2  3  4
5 10  6  1  2  3  4
0 голосов
/ 18 ноября 2018

A data.table подход:

library(data.table)

cbind(Dataset, dcast(Headers, . ~ x, value.var = "y")[,-1])

Выход:

   H  W x1 x2 x3 x4
1 20 30  1  2  3  4
2 10 20  1  2  3  4
3 11 30  1  2  3  4
4  8 10  1  2  3  4
5 10  6  1  2  3  4

A tidyverse подход:

library(tidyverse)

Headers %>%
  rownames_to_column %>%
  spread(x, y) %>%
  summarise_all(funs(first(na.omit(.)))) %>%
  cbind(Dataset, .) %>% select(-rowname)

Выход:

   H  W x1 x2 x3 x4
1 20 30  1  2  3  4
2 10 20  1  2  3  4
3 11 30  1  2  3  4
4  8 10  1  2  3  4
5 10  6  1  2  3  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...