2016-07-28 63 views
0

我有以下tbl_df;总计2行不同变量dplyr

V1 V2 
abc 39 
12bc 15 
87gd 3 
987 50 

正巧变量abc和可变12bc意味着同样的事情。我想运行一个dplyr脚本来添加V2上的值来合并两行,隐藏或删除以前的行并创建一个新行。 tbl_df最终将如下所示:

V1 V2 
abc 54 => where abc is the sum of previous abc and 12bc 
87gd 3 
987 50 

预先感谢您!

+1

如何知道'abc'和'12bc'是指同一件事物 - 是它*只是*你想合并的那两个,还是合并一组更大的值对(或组) ? –

+0

abc在旧版本中具有含义,在新版本中将其改为12bc。 – Gilbert

+0

你有这种匹配查找表吗?或者它只有1例abc到12bc? – zx8754

回答

1

如果你不想使用plyr,这可能工作!

new_df <- old_df %>% 
    mutate(V1 = ifelse(V1 == "12bc", "abc", V1) %>% 
    group_by(V1) %>% 
    summarise(V2 = sum(v2)) 
+0

这正是我需要的。非常感谢你!!! – Gilbert

1

分两步进行:首先用新值替换“旧”V1值,然后按V1进行分组并汇总。

plyr包中有一个revalue函数可用于替换值。首先创建一个矢量与所有你想要的替代品(如果它的只有6家,如您在您的评论指定,这不应该是一个问题)

replacements <- c("12bc" = "abc") # put other pairs in, separated by commas 

然后,您可以在相同的步骤升值和组总结之前:

newdata <- mydata %>% 
    group_by(V1 = plyr::revalue(V1, replacements)) %>% 
    summarize(V2 = sum(V2)) 

请注意,这假定您没有任何列,除了V1和V2。如果你这样做,你需要指定他们如何得到总结(如果它们在旧版本和新版本之间有所不同,怎么办?)

+0

'dplyr :: summarize()'...做'plyr :: summarize()'关心'group_by'吗? – Dambo

+2

@Dambo不,但我不是在做'library(plyr)'。相反,我指定'plyr :: revalue'(它不会将plyr加载到名称空间中),这是一个很好的做法,同时使用 –

+0

谢谢,这是我仅仅使用几个函数时要记住的事情一个库 – Dambo