【问题标题】:SUM on a data.frame returns errordata.frame 上的 SUM 返回错误
【发布时间】:2014-02-25 06:17:34
【问题描述】:

我有一个名为 PSIBL_out 的 data.frame。

   sallgi     stext2    staxid           stext3  
1   hgd;te;     hgh     gfg;dgj;jhh       AJJC
2   hf          jhd     hjhj              hgfd
3   oui         dhk     kjll              jhjs

我想查找列“staxids”具有多个值并用“;”分隔的所有行。对于每一行,我想查看“sallgi”列,计算“;”的次数出现并将数字放在“a”中。

The code I wrote is the following:

  for(i in PSIBl_out[grep(";", PSIBl_out[,"staxids"]),])
  {
   a <- sum(PSIBl_out[grep(";", PSIBl_out[,"sallgi"]),])
  }

我收到以下错误,我认为这是 SUM 函数:

 Error in FUN(X[[1L]], ...) : 
  only defined on a data frame with all numeric variables

想法?

【问题讨论】:

  • 我认为您的问题是您使用的是grep 而不是grepl。请务必仔细阅读这些文档以查看每个返回的内容。
  • ...您正在尝试对数据框求和,这没有任何意义。要计数,请将 sum 应用于 grepl 的输出。
  • 是的,你是对的,我应用 sum i 的方式错误
  • 我意识到的另一个错误是我如何使用 grep
  • 我现在正在尝试以下操作:for(i in PSIBl_out[grep(";", PSIBl_out[,"staxids"]),]) { a

标签: r


【解决方案1】:

您的问题仍然有点不清楚(顺便说一句,您应该通过编辑来澄清您的问题,而不是离开 cmets!)。

但我猜你想要这样的东西:

library(stringr)
> dat <- read.table(text = "sallgi     stext2    staxid           stext3  
+ 1   hgd;te;     hgh     gfg;dgj;jhh       AJJC
+ 2   hf          jhd     hjhj              hgfd
+ 3   oui         dhk     kjll              jhjs",header = TRUE,sep = "")
> str_count(dat$sallgi[grepl(";",dat$staxid)],";")
[1] 2

但从您的问题中不清楚您是要对原始数据框中的每一行进行计数,还是仅对 staxid 列中存在 ; 的那些行进行计数。

【讨论】:

  • 感谢您的编辑提示,我一直在寻找类似的东西,但直到您指出才看到。是的,我只想计算在 staxid 列上应用 grep 返回的那些行
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2021-12-21
  • 2022-06-19
相关资源
最近更新 更多