r - 基于 R 中 2 个独立数据帧的值创建新数据帧的有效方法

标签 r dataframe

我希望帮助您找到一种有效的方法来创建新的 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/

相关文章:

python - 使用列表理解迭代 Pandas 数据框

r - 将NA移到数据框中每一列的末尾

r - 在前几行中创建包含源/版权信息的 .csv 或 .txt 文件,以便从 Shiny 的导出

python-3.x - Python 3 pandas 数据框创建取决于文件格式 csv 或 txt

python - 在 pandas 数据框中分隔行值

r - 如何在R中执行协同过滤

r - 使用 fread 找不到文件

json - 解析错误:尝试解析数据框中的JSON列时出现“Trailing Garbage”

r - 将 Stata 转换为 R : collapse

R 将正数和负数的 $xxx.xx 更改为 xxx.xx 但不舍入