我想将数据转换为数据帧数据,如下所示。
> d<-c("A", "B", "C", "D")
> order <- c("1-A","3-B","2-C","4-D")
> matchtable<-data.frame(d,order)
> matchtable
d order
1 A 1-A
2 B 3-B
3 C 2-C
4 D 4-D
这意味着A->1-A,B->3-B等
我的数据帧数据是
> id<- 1:10
> Type<-c(rep("A",3),"D",rep("B",4),"A","C")
> data<-data.frame(id,Type)
> data
id Type
1 1 A
2 2 A
3 3 A
4 4 D
5 5 B
6 6 B
7 7 B
8 8 B
9 9 A
10 10 C
我的理想答案是
> IDEAL <- c(rep("1-A",3),"4-D",rep("3-B",4),"1-A","2-C")
> newdata <- data.frame(id, IDEAL)
> newdata
id IDEAL
1 1 1-A
2 2 1-A
3 3 1-A
4 4 4-D
5 5 3-B
6 6 3-B
7 7 3-B
8 8 3-B
9 9 1-A
10 10 2-C
我尝试使用以下带有错误消息的代码
> merge(matchtable, table, by.x="d", by.y="id")
Error in fix.by(by.y, y) : 'by' must specify a uniquely valid column
感谢您的温柔帮助
我只需要将"matchtable"重新格式化为一个命名向量,然后就可以了:
order <- c("1-A","3-B","2-C","4-D")
names(order) <- c("A", "B", "C", "D")
id <- 1:10
Type <- c(rep("A",3),"D",rep("B",4),"A","C")
data <- data.frame(id,Type)
data.frame(data$id, "IDEAL"=order[data$Type])
您仍然应该使用merge
IMHO
merge(data, matchtable, by.x = "Type", by.y = "d")
## Type id order
## 1 A 1 1-A
## 2 A 2 1-A
## 3 A 3 1-A
## 4 A 9 1-A
## 5 B 6 3-B
## 6 B 7 3-B
## 7 B 8 3-B
## 8 B 5 3-B
## 9 C 10 2-C
## 10 D 4 4-D