[英]transform one column elements in a data frame using merge in R
I would like to transform data for data frame data as shown below. 我想将数据转换为数据帧数据,如下所示。
> 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
which means A-> 1-A, B -> 3-B etc. 这意味着A-> 1-A,B-> 3-B等。
my data frame data is 我的数据框数据是
> 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
My ideal answer would be 我的理想答案是
> 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
i tried using following code with error message 我尝试将以下代码与错误消息一起使用
> merge(matchtable, table, by.x="d", by.y="id")
Error in fix.by(by.y, y) : 'by' must specify a uniquely valid column
Thanks for your gentle help 多谢您的协助
I would just reformat "matchtable" to a named vector, then this works: 我只是将“ 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])
You should still use merge
IMHO 您仍然应该使用merge
恕我直言
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.