2017-07-19 84 views
0

我有一堆列,我想這其中存在着某些列具有相同的值數據的子集:收集具有匹配列並處理新數據的行?

Col0 Col1 Col2 
A beer 5 
A beer 439 
A wine 123 
A wine 1293 
B beer 493 
B beer 91 
B wine 944 

所以我需要選擇基於說COL0和Col1中。所以它會經過並選擇Col0和Col1匹配的所有東西。

所以我們有一個結果,看起來像這樣的:

0: [A, beer, 5], [A, beer, 439] 
1: [A, wine, 123], [A, wine, 1293] 
2: [B, beer, 493], [B beer, 91] 
3: [B, wine, 944] 

然後我想處理結果爲基於數據的其他列別的東西。因此,讓我們來看看如果Col2的總和是一個質數,如果它是在與該值不同的表中創建一個新行。如果不是,找到最接近的素數,然後添加具有最接近的素數的新行。

+0

獨立你的第二個要求'然後我要處理的結果...'到以後的帖子....每次一個問題。 – CPak

回答

0

加載一些庫和數據df

library(data.table) 
library(tidyverse) 
df <- fread("Col0\tCol1\tCol2 
    A\tbeer\t5 
    A\tbeer\t439 
    A\twine\t123 
    A\twine\t1293 
    B\tbeer\t493 
    B\tbeer\t91 
    B\twine\t944",header=T,sep="\t") %>% 
    as.data.frame() 

我用tidyverse達到你所期望的輸出

df1 <- df %>% 
     group_by(Col0,Col1) %>% 
     nest(Col2) %>% 
     rowwise() %>% 
     mutate(data = map(data,~paste0("[", Col0, ", ", Col1, ", ", .x, "]"))) %>% 
     ungroup() %>% 
     unnest(data) %>% 
     group_by(Col0,Col1) %>% 
     summarise(data = paste0(data, collapse=", ")) 

輸出

Col0 Col1       data 
1  A beer [A, beer, 5], [A, beer, 439] 
2  A wine [A, wine, 123], [A, wine, 1293] 
3  B beer [B, beer, 493], [B, beer, 91] 
4  B wine     [B, wine, 944] 

如果你想保存只有所需輸出

mylist <- df1$data