首页 文章

子集data.frames,合并子集和结果的rbind

提问于
浏览
2

我试图在 df2 中找到 values ,它在 df1 中的 value 的百分比内 . 这些 dfs 是长格式,由以下列/变量 State (df1), ID (df2), MMvariablevalue 组成 . 我匹配 MMvariable 并且包括data.frames之间的所有 values ,以便我可以稍后对它们进行子集化以选择百分比内的那些 .

我的问题的解决方案几乎可以找到here,使用merge然后子集来查找 values . 但是,额外的细微差别不允许我按原样使用此解决方案 . df1 是~900行, df2 是~1,600,000行,如果我尝试 merge 全部,r /我的机器无法处理它 . 但是,首先对每个 MMvariable 进行子集化,然后合并,然后进行子集化,最后对所有中间体子集化data.frames进行rbinding,应该产生我想要的结果 .

有没有办法将子集 data.frames 然后 merge 它们存储,存储结果直到通过子集化列表 data.frames 合并然后再绑定它们?

我知道dlply可以列出子集化的data.frames,但我不知道如何按顺序保留子集和合并 . 最多有12个 MM 组,总是4个 variable 组,每个 df 最多36个子集 .

for循环或具有for循环的函数似乎可以工作,但我不知道在r中使用正确的工具来实现它 .

下面的示例执行一个(最多36个) MMvariable 分组的子集和合并 .

# 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 回答

  • 1

    从这部分问题:

    有没有办法分组data.frames然后合并它们,存储结果直到通过子集化data.frames列表合并然后rbind它们?

    我假设你想保留中间结果或中间计算/子集 . 如果确实如此,您可以将中间结果存储在文件中(例如.txt或.csv文件),然后在必要时读回文件 .

    您可以编写一个data.frame,将my_df直接写入如下文件中:

    write.table(my_df,"filename.txt", sep="\t")
    

    这里,data.frame的列由选项卡分隔,但请查看此I / O命令上的documentation以获取更多详细信息 .

    每当您想要将所有信息加载到data.frame中时,只需使用read.table命令:

    newDf <- read.table("filename.txt")
    

    希望这可以帮到你 .

相关问题