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