【问题标题】:Create a new row at the bottom of dataframe and add column sums在数据框底部创建一个新行并添加列总和
【发布时间】:2012-03-30 11:58:24
【问题描述】:

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

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

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

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")

我的数据集维度是 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))

x[9,(2:3)]

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

x[366,(3:27)] <- apply(df, 2, sum)

但它给出了这样的错误:“FUN(newX[, i], ...) 中的错误:参数的“类型”(字符)无效”

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

【问题讨论】:

  • 如果你运行 str(df) 它会告诉你最后 24 列是数字类还是整数类?看起来其中一个或多个是字符类
  • 嗨,如果我执行 str(df),它会显示最后 25 个列的“num”

标签: r


【解决方案1】:

apply(df, 2, sum) 将尝试对所有列求和,如果列 typedate 属于 R 没有 sum 方法的类型,这将失败。你可以试试

df[366,(3:27)] <- colSums(df[,3:27], na.rm=TRUE)

编辑

识别数字列:

myNumCols <- which(unlist(lapply(df, is.numeric)))

然后

df[(nrow(df) + 1), myNumCols] <- colSums(df[, myNumCols], na.rm=TRUE)

【讨论】:

  • 感谢 Ben 的回答,它现在创建了第 366 行,但除了最后一个显示总和值的 'Total' 值外,其他值都显示为 'NA',你知道如何纠正这个问题吗?谢谢
  • 各位大佬整理出来了,谢谢大家的帮助! :) 由于缺少数据,它显示 na,所以我使用: df[(nrow(df) + 1), myNumCols]
  • @Ayan,将na.rm=TRUE 添加到colSums
  • 如何将参数 TOTAL 传递到第一列的第 366 行?
猜你喜欢
  • 2021-07-06
  • 2021-12-12
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2019-09-23
  • 2015-11-04
相关资源
最近更新 更多