搜索和匹配表格

时间:2011-12-13 08:17:11

标签: r replace

> 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)将表y的B列中的X1替换为表X1中的条目(即a1 ... a4)。 (2)填写表y列A中的所有空白区域。 (3)在表y中添加新列C并用数字“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表,而不仅仅是一个。我必须将这些表的名称与表y的B列相匹配。我可以一个接一个地做,但我相信有更聪明的方法可以做到这一点。请帮助。

1 个答案:

答案 0 :(得分:0)

填写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

请注意,这是未经测试的,但有想法。