2011-09-13 27 views

回答

2

這應該做:

df$sums<- rowSums(subset(df, select=grepl("v", names(df)))) 

對於一個更通用的方法:

apply(subset(df, select=grepl("v", names(df))), 1, sum) 
6

grepnames拿到列位置,然後使用rowSums

rowSums(df[,grep("v",names(df))]) 
+1

如果只選擇一列,使用'df [grep(「v」,names(df))]'來避免轉換爲向量。比較'df [,「v1」]和'df [「v1」]''。 – Marek

3

要結合@詹姆斯和@阿納託利的回答,

apply(df[grepl('^v', names(df))], 1, sum) 

我繼續並將正則表達式中的v錨定到字符串的開頭。其他的例子還沒有這樣做,但看起來你希望所有以v開頭的列不是可能在名字中有v的較大集合。如果我錯了,你可以只是做

apply(df[grepl('v', names(df))], 1, sum) 

你應該避免編程時使用subset(),如?subset

說這是旨在用於交互的便捷功能。對於 編程,最好使用標準子集函數,如 '[',特別是參數 '子集'的非標準評估可能會產生意想不到的後果。

而且,正如我昨天from Richie Cotton瞭解到,索引最好是使用greplgrep時。

相關問題