Поиск и сопоставление таблиц - PullRequest
0 голосов
/ 13 декабря 2011
> X1 <- data.frame(A=c("a1","a2","a3","a4"))
> X1
   A
1 a1
2 a2
3 a3
4 a4

> y <- data.frame(A=c("b1", " ", " ", "b2"," ", "b3"), B=c("c1","c2","c3","c4","X1","c5"))
> y
   A  B
1 b1 c1
2    c2
3    c3
4 b2 c4
5    X1
6 b3 c5

Я хочу сделать три вещи в таблице y.
(1) замените X1 в столбце B таблицы y на записи (то есть a1 ... a4) в таблице X1. (2) заполнить все пустые места в столбце A таблицы y. (3) добавьте новый столбец C в таблицу y и заполните все цифрой «1»

Ожидается, что новая таблица y будет иметь следующий вид:

   A  B C
1 b1 c1 1
2 b1 c2 1
3 b1 c3 1
4 b2 c4 1
5 b2 a1 1
6 b2 a2 1
7 b2 a3 1
8 b2 a4 1
9 b3 c5 1

Не могли бы вы предложить эффективный способ сделать это, у меня есть большое количество таблиц X1, а не одна. Я должен сопоставить имена этих таблиц со столбцом B таблицы y. Я мог бы сделать это один за другим, но я уверен, что есть более разумный способ сделать это. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 декабря 2011

Чтобы заполнить столбец A:

y$A<-y$A[y$A!=" "][cumsum(y$A!=" ")]

Чтобы добавить столбец C (давай, ты мог бы найти это сам!):

y$C=1 #Duh

Чтобы развернуть столбец B: Если заказ не важен:

x1part<-y[rep(which(y$b=="X1"), each=nrow(X1)),]
x1part$B<-X1$A
cbind(y[y$b!="X1",], x1part)

Если заказ важен:

newy<-y[rep(seq(nrow(y)), ifelse(y$b=="X1", nrow(X1), 1)),]
newy$B[newy$B=="X1"]<-X1$A

Обратите внимание, что это не проверено, но идеи есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...