我是R的新手,正在尝试将几个数据集合并为一个。 我有以下数据结构:
opt <- data.frame( name=c("opt1", "opt2","opt3"), week=c(1,1,1,2,2,3), price=c(0))
price <- data.frame( week=c(1,2,3), opt1=c(3, 4,3.15), opt2=c(4.2, 3.5, 5), opt3=c(3,2,6))
如果行opt$name
中的条目与“data.frame price”和opt$week==price$week
中的列名匹配,我现在想要提取“data.frame price”中的数字。
下一步是将所选号码添加到opt$price
列。
要创建一个如下所示的新data.frame:
optcomp <- data.frame( name=c("opt1", "opt2","opt3"), week=c(1,1,1,2,2,3), price=c(3.00,4.2,3,4.00,3.5,6))
我试图构建一些循环,但我在R中的技能是有限的。
非常感谢任何帮助!
唐纳德
答案 0 :(得分:1)
初始合并,以匹配week
列:
x <- merge(opt,price)
x
## week name price opt1 opt2 opt3
## 1 1 opt1 0 3.00 4.2 3
## 2 1 opt2 0 3.00 4.2 3
## 3 1 opt3 0 3.00 4.2 3
## 4 2 opt1 0 4.00 3.5 2
## 5 2 opt2 0 4.00 3.5 2
## 6 3 opt3 0 3.15 5.0 6
您想要的值:
sapply(seq(nrow(x)), function(i) x[i,as.character(x$name[i])])
[1] 3.0 4.2 3.0 4.0 3.5 6.0
将x
的行名称指定为character
允许按名称进行矩阵索引(并返回character
)
rownames(x) <- as.character(rownames(x))
x.ind <- matrix(c(rownames(x), as.character(x$name)),,2)
x[x.ind]
## [1] "3.00" "4.2" "3" "4.00" "3.5" "6"