使用两个数据文件中的值在 R 中进行一个计算公式

问题描述 投票:0回答:3

我有两个数据文件。

  1. 颗粒物 (PM) 浓度(约 20000 个观测值)
  2. 与颗粒物浓度一起使用的系数组合来计算最终浓度。

例如..

数据集1。

ID      PM 
 1       5 
 2      10 
...    ... 
1500    25 

数据集2。

alpha    beta 
    5       6 
    1       2 
  ...     ... 

我最终必须使用数据集 1 中每个 ID 的所有系数组合(alpha 和 beta)。例如,如果我在数据集 1 中有 10 个观测值,在数据集 2 中有 10 个系数组合,我的输出表应该有 100 个不同的输出值 (10*10=100)。

for (i in cmaq$FID) {
  mean=cmaq$PM*IER$alpha*IER$beta 
}

我使用上面的代码来做我想做的事情,但它只给了我 10 个输出值而不是 100 个。我认为首先使用 split 函数,并以某种方式将其与第二个数据集一起使用会起作用,但还没有弄清楚如何...

r loops split
3个回答
1
投票

你可以这样做:

df1 = data.frame(
    ID = c(1, 2, 1500),
    PM = c(5, 10, 25)
)
df2 = data.frame(
    alpha = c(5, 6),
    beta = c(1, 2)
)

library(tidyverse)
library(dplyr)


df1 %>%
    group_by(ID) %>%
    do(data.frame(result = .$PM * df2$alpha * df2$beta,
                  alpha = df2$alpha,
                  beta = df2$beta))

1
投票

查找术语“交叉连接”或“笛卡尔连接”(例如,如何在 R 中进行交叉连接?)。

我认为循环中有一个错误。

beta
是自由浮动的,未连接到
IER
data.frame


0
投票

我们可以用

outer

来做到这一点
data.frame(ID = rep(df1$ID, each = nrow(df2)), alpha = df2$alpha, 
     beta = df2$beta, result = c(t(outer(df1$PM, df2$alpha*df2$beta))))
#    ID alpha beta result
#1    1     5    1     25
#2    1     6    2     60
#3    2     5    1     50
#4    2     6    2    120
#5 1500     5    1    125
#6 1500     6    2    300

数据

df1 <- structure(list(ID = c(1, 2, 1500), PM = c(5, 10, 25)), .Names = c("ID", 
"PM"), row.names = c(NA, -3L), class = "data.frame")

df2 <- structure(list(alpha = c(5, 6), beta = c(1, 2)), .Names = c("alpha", 
 "beta"), row.names = c(NA, -2L), class = "data.frame")
© www.soinside.com 2019 - 2024. All rights reserved.