【问题标题】:Exclude one single column from sapply从 sapply 中排除一列
【发布时间】:2020-09-07 11:46:46
【问题描述】:

我有一个包含多个列的数据框,我想根据它们的名称对其进行分组。当多个列名称响应相同的模式时,我希望将它们分组在一个列中,并且该列是该组的总和。

colnames(dataframe)

[1] "Départements" "01...3"       "01...4"       "01...5"       "02...6"       "02...7"       "02...8"       "02...9"       "02...10"      "03...11"     
 [11] "03...12"      "03...13"      "04...14"      "04...15"      "05...16"      "05...17"      "05...18"      "06...19"      "06...20"      "06...21"

所以我使用这段代码在每列都是数字时工作得很好,尽管第一个是字符,因此我遇到了错误。如何从代码中排除第一列?

#按模式分组列,寻找模式并循环

patterns <- unique(substr(names(dataframe_2012), 1, 3))`  #store patterns in a vector

dataframe <- sapply(patterns, function(xx) rowSums(dataframe[,grep(xx, names(dataframe)), drop=FALSE]))  
#loop through

这是我得到的错误代码

rowSums 中的错误(DEPTpolicedata_2012[, grep(xx, names(DEPTpolicedata_2012)), : “x”必须是数字

【问题讨论】:

  • 对不起,示例中的错误代码是 Error in rowSums(dataframe[, grep(xx, names(dataframe)), : 'x' must be numeric
  • dataframe中每一列的数据类型是什么?感觉有些列不是数字的。

标签: r sapply


【解决方案1】:

您可以简单地使用删除第一列

patterns$Départements <- NULL

【讨论】:

  • 谢谢。但它只是返回错误模式[,-1]:不正确的维数
  • 你确实是对的......当我将模式存储在向量中时,它一直是 FALSE。但是在原始 df 中,只有第一列是字符。
  • 我已经更新了答案,所以你可以删除第一列。
  • 也许问题只是向量模式只是字符值。它应该以某种方式指定如何获取除第 1 列之外的数值
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 2019-01-26
  • 2012-03-27
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
相关资源
最近更新 更多