【问题标题】:Multiply columns in different dataframes将不同数据框中的列相乘
【发布时间】:2019-07-25 03:10:13
【问题描述】:

我正在编写用于分析一组 dplyr 数据的代码。

这是我的 table_1 的外观:

 1 A B C
 2 5 2 3
 3 9 4 1
 4 6 3 8
 5 3 7 3

我的 table_2 看起来像这样:

 1 D E F
 2 2 9 3 

我想根据表1列“A”,如果A>6,则在表1中创建列“G”,等于“C*D+C*E

基本上,这就像将表 2 作为一个因素...

有什么办法可以做到吗?

我可以将过滤器应用于“A”列,并将“C”列与设定的数字相乘,而不是 table_2 中的因子

 table_1_New <- mutate(Table_1,G=if_else(A<6,C*2+C*9))

【问题讨论】:

  • 你能显示你的预期输出吗?如果table_2 有多行,您将乘以哪一行?
  • 您好罗纳克,感谢您的帮助。我认为我想存档的输出看起来像表 1,但有 1 个额外的列“G”。 G等于C*2+C*9。这与 table_2 中的数字相同。它就像将列“C”与一个向量相乘(table2中的Row2)

标签: r dplyr multidplyr


【解决方案1】:

你可以试试

#Initialize G column with 0
df1$G <- 0
#Get index where A value is greater than 6
inds <- df1$A > 6
#Multiply those values with D and E from df2
df1$G[inds] <- df1$C[inds] * df2$D + df1$C[inds] * df2$E
df1

#  A B C  G
#2 5 2 3  0
#3 9 4 1 11
#4 6 3 8  0
#5 3 7 3  0

使用dplyr,我们可以做到

df1 %>% mutate(G = ifelse(A > 6, C*df2$D + C*df2$E, 0))

【讨论】:

  • 嗨 Ronak Shah,谢谢你帮助我,但它不起作用,它说:较长的对象长度不是较短对象长度的倍数
  • @BomberGay 你可以试试df1 %&gt;% mutate(G = ifelse(A &gt; 6, C*df2$D[1] + C*df2$E[1], 0))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多