使用两个数据文件中的值作为一个公式,以便在R

时间:2017-07-05 04:04:42

标签: r loops split

我是一个尝试成为R的用户。我从来没有学会正确编码,只是通过在线查找内容来做到这一点。

我遇到了一个问题,我需要一些专家的帮助。

我有两个数据文件。

  1. 颗粒物质(PM)浓度(约20000个观察值)
  2. 与颗粒物浓度一起使用的系数组合,以计算最终浓度。
  3. 例如......

    数据集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专家那里获得一些帮助可能是一个更好的策略。

    提前谢谢!!!

3 个答案:

答案 0 :(得分:1)

查找术语“交叉加入”#39;或者'笛卡尔加入' (例如,How to do cross join in R?)。

如果没有解决问题,请参阅https://stackoverflow.com/help/mcve。我认为循环内部存在错误。 beta是自由浮动的,未与IER data.frame

相关联

答案 1 :(得分: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))

答案 2 :(得分: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")