2017-05-10 63 views
0

我想要在幾列上求和並根據它們創建一個新列。所以我用如果函數爲rowSums_修改代碼

df$Sum <-rowSums(df[,grep("y", names(df))]) 

但有時df只包含一列,在這種情況下,我會得到錯誤。由於這個函數是我長時間編程過程的一部分,所以我想知道如何以一種方式創建一個if函數,如果df[,grep("y", names(df))]只包含一列,那麼得到總和等於df[,grep("y", names(df))],否則如果df[,grep("y", names(df))]在兩列中有多個得到求和在他們身上? 假設:

require(stats); require(graphics) 
attach(cars) 
cars$y1<-seq(20:69) 
#cars$y2<-seq(30:79) 
df<-cars 
df$Sum <-rowSums(df[,grep("y", names(df))]) 

回答

2

可以子集化時使用drop = FALSE

df$Sum <-rowSums(df[,grep("y", names(df)), drop = FALSE]) 

這使df作爲一個數據幀,即使你只選擇一列。