我有这个:
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"
非常感谢任何帮助。
感谢。
答案 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
第二步是使用Pos
在cbind(seq_len(nrow(df)), df$Pos)
中指定的每行的列,并使用<- df$Bid