我有6个colums的df。对于每一行,我需要找到min()数,并且取决于它来自哪个列,我需要将数字乘以另一个df中的数字。我有......
如果数字来自df1,colums 1和4,则需要乘以df2 [same row,col 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