2017-07-19 85 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