在数据框的底部创建一个新行并添加列总和

Ach*_*hak 4 r

我正在使用以下代码从工作目录中读取csv文件:

df <- read.csv("test1.csv", header = TRUE,skip =6, nrow =
length(count.fields("test1.csv")) - 12)
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码更改列名:

colnames(df) = c("type","date","v1","v2","v3","v4","v5","v6","v7","v8","v9","v10","v11","v12","v13","v14","v15","v16","v17","v18","v19","v20","v21","v22","v23","v24","total")
Run Code Online (Sandbox Code Playgroud)

我的数据集维度是365行x 24列,我试图计算列(3:27)总和,并在数据框底部用总和创建一个新行.

data.frame看起来像这样:

在此输入图像描述

如果我尝试使用如下的一些示例数据进行测试,它可以正常工作:

x <- data.frame(x1 = c(3:8, 1:2), x2 = c(4:1, 2:5),x3 = c(3:8, 1:2), x4 = c(4:1, 2:5))
Run Code Online (Sandbox Code Playgroud)

x [9,(2:3)] < - apply(x,2,sum)

但是当我尝试使用我正在使用的csv文件时,我使用的代码如下:

x[366,(3:27)] <- apply(df, 2, sum)
Run Code Online (Sandbox Code Playgroud)

但它会出现如下错误:"FUN中的错误(newX [,i],...):参数的"类型"(字符)无效"

谁能告诉我如何解决这个问题?

Ben*_*nes 5

apply(df, 2, sum)将尝试对所有列求和,如果列typedateR是没有sum方法的类型,则会失败.你可以试试

df[366,(3:27)] <- colSums(df[,3:27], na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

编辑

要标识数字列:

myNumCols <- which(unlist(lapply(df, is.numeric)))
Run Code Online (Sandbox Code Playgroud)

然后

df[(nrow(df) + 1), myNumCols] <- colSums(df[, myNumCols], na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)