使用两个数据文件中的值作为R中计算的一个公式

mrwjdhj3  于 2023-11-14  发布在  其他
关注(0)|答案(3)|浏览(102)

我有两个数据文件。
1.颗粒物(PM)浓度(约20000个观测值)
1.与颗粒物浓度一起使用以计算最终浓度的系数组合。
比如...
数据集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函数,然后以某种方式将其用于第二个数据集,但还没有弄清楚如何...

yvgpqqbh

yvgpqqbh1#

您可以:

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))

字符串

xj3cbfub

xj3cbfub2#

查找术语“交叉连接”或“交叉连接”(例如,How to do cross join in R?)。
我认为循环中有一个错误。beta是自由浮动的,没有连接到IER Dataframe 。

cvxl0en2

cvxl0en23#

我们可以用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")

相关问题