我是一个尝试成为R的用户。我从来没有学会正确编码,只是通过在线查找内容来做到这一点。
我遇到了一个问题,我需要一些专家的帮助。
我有两个数据文件。
例如......
数据集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专家那里获得一些帮助可能是一个更好的策略。
提前谢谢!!!
答案 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")