2014-10-30 37 views
2

我有这样的:R:基于指标/位置乘以一列数据帧的其余部分

Keyword 1 2 3 4 Pos Bid 
a  0.8 0.6 0.4 0.2 1 5 
b  0.9 0.7 0.5 0.3 3 9 
c  0.6 0.3 0.2 0.1 2 7 
d  0.5 0.4 0.4 0.2 4 2 

我通过4需要多个列1由Bid除了由名次为每个所指示的列行,这样我得到这样的:

Keyword  1  2  3  4 
a   5  5*0.6 5*0.4 5*0.2 
b   9*0.9 9*0.7  9  9*0.3 
c   7*0.6  7  7*0.2 7*0.1 
d   2*0.5 2*0.4 2*0.4  2 

的列实际上命名为 “1”, “2”, “3”, “4”, “5”, “6”, “7”,“ 8“,”9“和”10“。

任何帮助将不胜感激。

谢谢。

回答

1

这似乎工作

colindx <- grep("\\d", names(df)) 
df[, colindx] <- df[, colindx] * df$Bid 
df[, colindx][cbind(seq_len(nrow(df)), df$Pos)] <- df$Bid 
df 
## Keyword X1 X2 X3 X4 Pos Bid 
## 1  a 5.0 3.0 2.0 1.0 1 5 
## 2  b 8.1 6.3 9.0 2.7 3 9 
## 3  c 4.2 7.0 1.4 0.7 2 7 
## 4  d 1.0 0.8 0.8 2.0 4 2 

几点说明:

grep("\\d", names(df))只选择那些含有一些数字列名和我通过df$Bid

第二步是繁衍这些列Pos中使用cbind(seq_len(nrow(df)), df$Pos)指定的每行的每列,并使用<- df$Bid

插入实际出价
+0

什么是“\\ d”'? – Cinji18 2014-10-30 21:38:50

+0

我只是抓住所有包含数字的列名称,正如您所说,在真实数据中您有来自1:10的列。所以这也会对你的真实数据起作用 – 2014-10-30 21:47:26

+0

哦,好的。我只是不知道它做了什么。再次感谢。 – Cinji18 2014-10-30 21:53:15