在dplyr mutate

时间:2016-11-29 08:24:21

标签: r dataframe dplyr

我有一个带有几个变量的data.frame,我需要根据它们名称中的模式求和。更具体地说,我有总共一个的股票,不包括我需要找到的可能残差。我正在使用dplyr

示例data.frame:

 df <- data.frame(year = c(2000, 2001, 2002),
             aShare = c(.1,.2,.3),
             bShare = c(.3,.4,.5))

我尝试使用ends_with这样的函数:

tmp <- df %>% mutate(otherShare = 1 - sum(ends_with("Share")))

但它没有产生所需的结果:

TMP <- df %>% mutate(otherShare = 1 - (aShare + bShare))

2 个答案:

答案 0 :(得分:6)

基础R

df$x <-1- rowSums(df[colnames(df)[grepl("Share",colnames(df))]])

使用半dplyr:P

df$x = (1-df %>% select(ends_with("Share")) %>% rowSums())

答案 1 :(得分:1)

不太可能是最佳选择,但我们可以使用apply行式

df$otherShare <- apply(df[grep("Share$", names(df))], 1, function(x) 1 - sum(x))

#   year aShare bShare otherShare
#1 2000    0.1    0.3        0.6
#2 2001    0.2    0.4        0.4
#3 2002    0.3    0.5        0.2