R:基于索引/位置将一列乘以数据帧的其余部分

时间:2014-10-30 21:08:27

标签: r indexing

我有这个:

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

除了Pos为每行指示的列之外,我需要按Bid排列多个第1列到第4列,以便我得到:

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 个答案:

答案 0 :(得分: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

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

将实际出价插入其中