我有一个带有几个变量的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))
答案 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