R-通过匹配第二个数据框中的列来乘以选择一个数据框中的列

意志1329

在R中,我尝试将数据帧(df1)中的选择列与第二个数据帧(df2)中的匹配列相乘。行数不相等(df2仅1),并且有些列我希望保留但不希望相乘。下面是一个示例:

df1 <- data.frame(group = c('A','B','C','A'), var1 = c(1,0,1,0), var2 = c(0,1,1,0))

df2 <- data.frame(var1 = 0.06, var2 = 0.04)

预期结果将是:

Group   var1   var2
A       0.06   0
B       0      0.04
C       0.06   0.04
A       0      0

如果需要,我很高兴调整df2的格式。tidyverse解决方案将是巨大的。

我读过其他一些试图做类似事情的问题,但是我无法让它们在我的情况下起作用

data.frame(Map(function(x,y) if(all(is.numeric(x),is.numeric(y))) x * y
                          else x, df1, df2))
# Multiply's by position not name

提前致谢。

阿克伦

我们可以用rep来使长度相同,col然后相乘

nm1 <- intersect(names(df1), names(df2))
df1[nm1] <-  df1[nm1] * unlist(df2[nm1])[col(df1[nm1])]
df1
#  group var1 var2
#1     A 0.06 0.00
#2     B 0.00 0.04
#3     C 0.06 0.04
#4     A 0.00 0.00

或使用 Map

df1[nm1] <- Map(`*`, df1[nm1], df2[nm1])

或使用 tidyverse

library(dplyr)
library(purrr)
map2_dfc(select(df1, nm1), select(df2, nm1),  `*`) %>%
     bind_cols(select(df1, -one_of(nm1)), .)
#  group var1 var2
#1     A 0.06 0.00
#2     B 0.00 0.04
#3     C 0.06 0.04
#4     A 0.00 0.00

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果第二个数据框中条目的值在 R 中的前 50% 之列,则用另一个数据框中的一列覆盖一个数据框中的列

添加列并从第二个数据框R中插入信息

将数据框中的列与R中第二个数据框中的重复值合并

使用R中的匹配将列的子集乘以第二个数据帧中的值

R将列乘以第二个数据帧中的值

将新列分配给R中第二个数据框的数据框列表

R 替换值,如果它匹配第二个数据帧中的值

根据第二个数据框R上的索引替换数据框中的值

R:匹配两个数据框并在一个中创建新列

R:重命名第二个数据帧的数据功能中的列(无盲数据)

从 R 中的不同数据框中按名称从一个数据框中选择列

R根据另一个中的值搜索第二个数据帧

当 A 列中的值遇到 R 中的第二个数据文件时,提取 B 列的值

在R中,如何根据第二个数据帧中的组保留一个数据帧中的所有行?

根据R中另一数据框中的条件值来匹配/子集一个数据框

如何计算一个数据帧中的值并将结果传输到 R 中相应列下的第二个数据帧?

用来自R中第二个数据表的观测值填充一个数据表中的NA值

R:循环遍历一个数据帧中的一组值更新第二个数据帧

在R的第二个数据框中找到最接近的字符串

如何在 R 中聚合并同时替换一个数据集中的第二个数据集的值

R根据标题名称将列与第二个数据帧中的值相乘

如何根据R中另一个数据框中的列删除列数据框中的行?

通过匹配r中的值和列名,将一个数据框的值合并到另一个数据框

根据另一个数据框中的列值从 R 中的数据框中删除行

如何使用 dplyr 根据 R 中的另一个数据框匹配列的值?

如何根据 R 中的另一个数据框匹配列的值并使用 dplyr 打印消息?

用R中第二个数据帧中的列值替换数据帧中三列的每个值

根据 R 中一列的值将一个数据框中的值插入到另一个数据框中

R在删除旧列的同时将一个数据框中的列与另一个数据框合并