如何合并R中不同表的数据

时间:2014-03-09 21:36:56

标签: r dataframe

想象一下,一个表有一列,其中有不同的数字,从1到10。在另一个表格中,解码了这些数字的含义。如何在第一个表中添加一个具有数字解释的列?这些数字不按顺序重复。

3 个答案:

答案 0 :(得分:2)

merge很容易做到这一点。使用merge的问题在于它会更改数据的顺序。如果这是一个问题,您可以使用正确的值轻松创建一个新因子。

这是一个例子。说A是您的第一个表,B是查找。

A <- data.frame(X=sample(10, 10, replace=T))
B <- data.frame(X=1:10, Y=LETTERS[11:20])

A$X
##  [1] 3 6 3 2 7 6 3 9 6 3

查找,按1到10的顺序排列:

B$Y
##  [1] K L M N O P Q R S T
## Levels: K L M N O P Q R S T

现在使用A的匹配标签在B$Y中创建一个新因素:

A$Y <- factor(A$X, levels=B$X, labels=B$Y)

A
##    X Y
## 1  3 M
## 2  6 P
## 3  3 M
## 4  2 L
## 5  7 Q
## 6  6 P
## 7  3 M
## 8  9 S
## 9  6 P
## 10 3 M

合并比较

这是merge将要做的事情。注意数字排成一行,每个都有正确的数字,但顺序不同。对于大多数用途,这无关紧要,但顺序的改变是这个答案的重点。

A$Y <- NULL # Remove factor added above
merge(A, B)
##    X Y
## 1  2 L
## 2  3 M
## 3  3 M
## 4  3 M
## 5  3 M
## 6  6 P
## 7  6 P
## 8  6 P
## 9  7 Q
## 10 9 S

merge默认排序。那么如果我们不排序呢?不,这也没有帮助。 X的唯一值都组合在一起。

merge(A, B, sort=FALSE)
##    X Y
## 1  3 M
## 2  3 M
## 3  3 M
## 4  3 M
## 5  6 P
## 6  6 P
## 7  6 P
## 8  2 L
## 9  7 Q
## 10 9 S

答案 1 :(得分:1)

x<-data.frame(n=sample(1:10,20,T))
y<-data.frame(n=sample(1:10,10),L=sample(LETTERS,10))
merge(x,y)
n L
1   1 G
2   1 G
3   2 A
4   3 B
5   3 B
6   4 S
7   5 J
8   5 J
9   6 I
10  6 I
11  6 I
12  8 L
13  9 O
14  9 O
15  9 O
16  9 O
17  9 O
18  9 O
19 10 V
20 10 V

答案 2 :(得分:1)

我认为merge就是你所需要的!查看此示例:

> d1<-data.frame(cbind(c(1,2,3,2,4), c("aa", "bb", "cc", "dd", "ee")))
> d2<-data.frame(cbind(c(1,2,3,4,5), c("one", "two", "three", "four", "five")))
> d3<-merge(d1, d2, by.x="X1", by.y="X1")
> d3