我有一个数据框可以说
a b
1 10
2 13
我有另一个数据框,我有1个值" c"等于0.3 我想创建专栏" d"在第一个数据框中使用以下公式
1st row will be 1*10*.3
2nd row will be 2*13*.3
请注意.3很常见。
请为此建议一个R函数。
答案 0 :(得分:1)
如果要按行将函数应用于数据框或矩阵,可以使用apply
,MARGIN
参数为1.此处所需的函数为prod
,或者由于您只有两列,因此可以使用*
。 apply
调用会逐行获取产品,为您提供长度为== nrow(df)
的向量。您可以将该向量直接乘以0.3
,为您提供值,并使用df$c<-
df$c <- apply(df, 1, prod)*0.3
df
a b c
1 1 2 0.6
2 10 13 39.0
数据:
df <- data.frame(a = c(1, 10), b = c(2, 13))
df
a b
1 1 2
2 10 13
答案 1 :(得分:1)
使用dplyr
并假设df2
只包含1个名为c
的列,其中1行值为0.3
:
require(dplyr)
df1 <- data.frame(a = c(1, 2), b = c(10, 13))
df2 <- data.frame(c = 0.3)
df1 %>%
mutate(d = a * b * df2$c)
答案 2 :(得分:0)
另一个选项是Reduce
*
df$c <- Reduce(`*`, df) * 0.3
df$c
#[1] 0.6 39.0
或者我们可以使用rowProds
matrixStats
library(matrixStats)
df$c <- 0.3 * rowProds(as.matrix(df))