簡體   English   中英

R:基於另一個data.frame獨立於data.frame的行子集

[英]R: Making subsetting of rows of a data.frame based on another data.frame independent

我有一個帶有示例數據的input data.frame

input <- structure(list(NAME = structure(c(3L, 7L, 6L, 4L, 2L, 5L, 1L), .Label = c("Example2","Example7", "Test", "Test2", "Test3", "Test6", "Test77"), class = "factor"), REFERENCE = structure(c(2L, 3L, 1L, 1L, 4L, 2L, 1L), .Label = c("EXAMPLE5", "REGION1", "REGION2", "REGION77"), class = "factor"), VALUE = structure(c(1L,2L, 3L, 4L, 6L, 5L, 7L), .Label = c("120", "13", "14", "65", "89", "B", "C"), class = "factor")), .Names = c("NAME", "REFERENCE", "VALUE"), class = "data.frame", row.names = c(NA, -7L))
      NAME REFERENCE VALUE
1     Test   REGION1   120
2   Test77   REGION2    13
3    Test6  EXAMPLE5    14
4    Test2  EXAMPLE5    65
5 Example7  REGION77     B
6    Test3   REGION1    89
7 Example2  EXAMPLE5     C

我還有第二個data.frame filelist ,其中數據的排序如下。

filelist <- structure(list(NAME = structure(c(3L, 5L, 1L, 6L, 4L, 2L), .Label = c("","Example2", "Test", "Test2", "Test3", "Test6"), class = "factor"), REFERENCE = structure(c(3L, 3L, 1L, 2L, 2L, 2L), .Label = c("",  "EXAMPLE5", "REGION1"), class = "factor")), .Names = c("NAME","REFERENCE"), class = "data.frame", row.names = c(NA, -6L))
          NAME REFERENCE
    1     Test   REGION1
    2    Test3   REGION1
    3                   
    4    Test6  EXAMPLE5
    5    Test2  EXAMPLE5
    6 Example2  EXAMPLE5

filelist包含應寫到單獨的data.frames中的所有值,這些值由REFERENCE列分組(如下面的代碼所示)。 到目前為止,我通過使用下面的代碼並手動設置各列,然后將它們重新綁定在一起來做到這一點。 有沒有一種方法可以獨立完成?

# Manual selection REGION1
Test <- subset(input, NAME=="Test")
Test3 <- subset(input, NAME=="Test3")
# rbind them together
REGION1 <- rbind(Test, Test3)

# Manual selection EXAMPLE5
Test6 <- subset(input, NAME=="Test6")
Test2 <- subset(input, NAME=="Test2")
Example2 <- subset(input, NAME=="Example2")
# rbind them together
EXAMPLE5 <- rbind(Test6, Test2,Example2)

這可能會有所幫助,而且您需要做什么。 似乎您想合並輸入和文件列表。 然后,您要為每個參考級別創建一個數據框。

library(dplyr)

ana <- filelist %>%
            left_join(., input)

split(ana, f = ana$REFERENCE )

#[[1]]
#  NAME REFERENCE VALUE
#3                 <NA>

#$EXAMPLE5
#      NAME REFERENCE VALUE
#4    Test6  EXAMPLE5    14
#5    Test2  EXAMPLE5    65
#6 Example2  EXAMPLE5     C

#$REGION1
#   NAME REFERENCE VALUE
#1  Test   REGION1   120
#2 Test3   REGION1    89

編輯

非常感謝@Richard Scriven。 這是OP想要的最后一步。

list2env(split(ana, f = ana$REFERENCE )[-1], .GlobalEnv)

#> EXAMPLE5
#      NAME REFERENCE VALUE
#4    Test6  EXAMPLE5    14
#5    Test2  EXAMPLE5    65
#6 Example2  EXAMPLE5     C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM