使用R中的merge变换数据帧中的一列元素



我想将数据转换为数据帧数据,如下所示。

> 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

相关内容

  • 没有找到相关文章

最新更新