我希望帮助您找到一种有效的方法来创建新的 df,基于 2 个独立 df 的值:第一个包含人们在一组项目上的分数,第二个包含每个项目的权重。我想创建一个新的 df ,将 df1 中的值乘以 df2 中各自的权重以用于评分。 举一个小例子来说明我的意思。数据框1和2:
it1<-c(0,1,2,0,1,2)
it2<-c(1,1,2,1,2,1)
it3<-c(0,2,1,1,1,0)
df1<-cbind(it1,it2,it3)
it<-c("it1","it2","it3")
val<-c(2,4,6)
df2<-cbind.data.frame(it,val)
我希望我的新 df 将 df1 中的值乘以 df2 中确定的适当权重(因此 item1 乘以 2,item 2 乘以 4,item 3 乘以 6)。我希望新的 df 看起来像这样:
it1 it2 it3
0 4 0
2 4 12
4 8 6
0 4 6
2 8 6
4 4 0
我的实际数据比这个示例有更多的项目和权重
最佳答案
如果列的顺序相同
df1 * df2$val[col(df1)]
或者正如@markus提到的
df1[,df2$it] * as.list(df2$val)
有多种方法可以解决这个问题。一种迂回选项是将其转换为长格式,然后进行连接并将其重新整形回“宽”格式
library(dplyr)
library(tidyr)
df1 %>%
mutate(rn = row_number()) %>%
pivot_longer(cols = -rn) %>%
left_join(df2, c('name' = 'it')) %>%
mutate(value = val* value) %>%
select(-val) %>%
pivot_wider(names_from = name, values_from = value) %>%
select(-rn)
注意:这里我们假设数据集都是data.frame
关于r - 基于 R 中 2 个独立数据帧的值创建新数据帧的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61736224/