在一个df中查找特定数字,并将其与另一个df中的数字相乘

时间:2017-09-19 21:52:54

标签: r dataframe

我有6个colums的df。对于每一行,我需要找到min()数,并且取决于它来自哪个列,我需要将数字乘以另一个df中的数字。我有......

  • df1,44行,6列
  • df2,44行,3列

如果数字来自df1,colums 1和4,则需要乘以df2 [same row,col 1]。其他例子:

  • 2和5与col 2和
  • 3和6 with col 3 ..

1 个答案:

答案 0 :(得分:0)

B Williams是对的;在这里提问时你真的应该包括一个reproducible example。这是你如何帮助别人帮助你的方式。我碰巧发现你的描述是可以理解的,所以我在下面有一个解决方案,但是为了将来参考,一个可重复的例子是获得帮助的最可靠的方法。

您需要的功能是which.min()

set.seed(42) # Set the seed for reproducibility
# Then make randomly generated data frames matching your description
df1 <- as.data.frame(matrix(rnorm(44*6), nrow=44, ncol=6))
df2 <- as.data.frame(matrix(rnorm(44*3), nrow=44, ncol=3))
cols <- rep(1:3, 2) # This helps index columns of df2
products <- sapply(1:44, function(i){ # for every row
    ind <- which.min(df1[i, ]) # find the column with the min value
    return(df1[i, ind] * df2[i, cols[ind]]) # and return the relevant product
})

要看到这个有效,我们可以检查第一行的答案:

df1[1, ]
        V1        V2        V3           V4        V5        V6
1 1.370958 -1.368281 0.9333463 6.288407e-05 -1.449007 0.3856679

which.min(df1[1, ])
V5 
 5 

df1[1, 5]
[1] -1.449007

df2[1, 2]
[1] -1.246395

df1[1, 5] * df2[1, 2]
[1] 1.806036

products[1]
[1] 1.806036