2013-04-03 47 views
0

列名匹配的行條目我是新來的R和嘗試了幾個數據集合二爲一。 我有我的數據的結構如下:與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))

我現在要提取的數字在「data.frame價格」如果opt$name行的條目中的列名相匹配「data.frame價格」和opt$week==price$week

下一步是向選定的號碼添加到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是有限的。

任何幫助將不勝感激!

唐納德

回答

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 

指定的xcharacter行名字可以通過矩陣索引名稱(並返回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" 
+0

謝謝馬修,它似乎很好! –