我试图在 df2
中找到 values
,它在 df1
中的 value
的百分比内 . 这些 dfs
是长格式,由以下列/变量 State
(df1), ID
(df2), MM
, variable
和 value
组成 . 我匹配 MM
和 variable
并且包括data.frames之间的所有 values
,以便我可以稍后对它们进行子集化以选择百分比内的那些 .
我的问题的解决方案几乎可以找到here,使用merge然后子集来查找 values
. 但是,额外的细微差别不允许我按原样使用此解决方案 . df1
是~900行, df2
是~1,600,000行,如果我尝试 merge
全部,r /我的机器无法处理它 . 但是,首先对每个 MM
和 variable
进行子集化,然后合并,然后进行子集化,最后对所有中间体子集化data.frames进行rbinding,应该产生我想要的结果 .
有没有办法将子集 data.frames
然后 merge
它们存储,存储结果直到通过子集化列表 data.frames
合并然后再绑定它们?
我知道dlply可以列出子集化的data.frames,但我不知道如何按顺序保留子集和合并 . 最多有12个 MM
组,总是4个 variable
组,每个 df
最多36个子集 .
for循环或具有for循环的函数似乎可以工作,但我不知道在r中使用正确的工具来实现它 .
下面的示例执行一个(最多36个) MM
和 variable
分组的子集和合并 .
# for example, MM = 1 and variable = TMN
df1 <- structure(list(State = structure(c(1L, 1L, 3L, 3L, 2L, 2L, 1L,
1L, 3L, 3L, 2L, 2L), .Label = c("AL", "NM", "PA"), class = "factor"),
MM = c(1L, 1L, 2L, 3L, 5L, 6L, 1L, 1L, 2L, 3L, 5L, 6L), variable = structure(c(2L,
4L, 2L, 4L, 2L, 4L, 3L, 1L, 3L, 1L, 3L, 1L), .Label = c("RH",
"TMN", "TMP", "TMX"), class = "factor"), value = c(1.2, 2.3,
3.4, 5.6, 7.8, 9.1, 1.3, 2.4, 3.5, 4.6, 5.7, 6.8)), .Names = c("State",
"MM", "variable", "value"), class = "data.frame", row.names = c(NA,
-12L))
df2 <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 4L, 4L, 4L), MM = c(1L, 1L, 1L, 1L, 2L, 6L, 3L, 2L, 5L, 6L, 6L, 5L, 3L, 1L, 7L
), variable = structure(c(2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 2L,
4L, 1L, 3L, 1L, 2L, 4L), .Label = c("RH", "TMN", "TMP", "TMX"), class = "factor"),
value = c(1.2, 2.3, 2.4, 1.3, 3.4, 9.1, 4.7, 3.5, 7.8, 5.6,
6.9, 5.7, 8.5, 1.2, 4.5)), .Names = c("ID", "MM", "variable", "value"),
class = "data.frame", row.names = c(NA, -15L))
df1.tmn <- subset(df1, MM == 1 && variable == 'TMN')
df2.tmn <- subset(df2, MM == 1 & variable == 'TMN')
df1.df2.tmn <- merge(df1.tmn, df2.tmn, by = c("MM", "variable"))
# desired output example using one MM and one variable
df1.df2.tmn.sub <- subset(df1.df2.tmn, value.y < value.x*1.025 & value.y > (value.x-(value.x*.025)))
# dlply can make subsets from data.frames into a list, but
MM <- unique(as.list(df1$MM))
VAR <- unique(as.list(df1$variable))
dlply(df1, c("MM", "variable"))
1 回答
从这部分问题:
我假设你想保留中间结果或中间计算/子集 . 如果确实如此,您可以将中间结果存储在文件中(例如.txt或.csv文件),然后在必要时读回文件 .
您可以编写一个data.frame,将my_df直接写入如下文件中:
这里,data.frame的列由选项卡分隔,但请查看此I / O命令上的documentation以获取更多详细信息 .
每当您想要将所有信息加载到data.frame中时,只需使用read.table命令:
希望这可以帮到你 .