6

非常に大きなdata.frameがあり、すべての列の値を合計したいと思います。

だから私は次のコードを使用しました:

sum(production[,4],na.rm=TRUE)

また

sum(production$X1961,na.rm=TRUE)

問題は、data.frameが非常に大きいことです。また、data.frameの名前が異なる40個の特定の列のみを合計したいと思います。そして、私はすべての列をリストしたくありません。よりスマートなソリューションはありますか?

最後に、すべての列の合計を新しいdata.frameに格納します。

前もって感謝します!

4

3 に答える 3

14

これを試して:

colSums(df[sapply(df, is.numeric)], na.rm = TRUE)

ここでsapply(df, is.numeric)、は数値であるすべての列を検出するために使用されます。

いくつかの列を合計したいだけの場合は、次のようにします。

colSums(df[c("X1961", "X1962", "X1999")], na.rm = TRUE)
于 2012-11-12T22:28:32.747 に答える
4
res <- unlist(lapply(production, function(x) if(is.numeric(x)) sum(x, na.rm=T)))

各数値列の合計を返します。

結果に基づいて新しいデータフレームを作成できます。

data.frame(t(res))
于 2012-11-12T21:56:15.060 に答える
2

すべての列を含めたくない場合は、どの列を含めるか(または、どの列を除外するか)を何らかの方法で指定する必要があります。

colsInclude <- c("X1961", "X1962", "X1963") # by name
    # or # 
colsInclude <- paste0("X", 1961:2003)  # by name
    # or # 
colsInclude <- c(10:19, 23, 55, 147)   # by column number

これらの列を新しいデータフレームに配置するには、[ ]次のように使用します。

newDF <- oldDF[, colsInclude]

各列を要約するには、単にcolSumsを使用します

sums <- colSums(newDF, na.rm=T)
    # or # 
sums <- colSums(oldDF[, colsInclude], na.rm=T)    

sums必ずしもデータフレームではなく、ベクトルになることに注意してください。を使用してデータフレームにすることができますas.data.frame

sums <- as.data.frame(sums)
    # or, to include the data frame from which it came #
sums <- rbind(newDF, "totals"=sums)
于 2012-11-12T22:52:17.473 に答える