如何在 r 的范围内返回 .csv 列中的值的数量

Posted

技术标签:

【中文标题】如何在 r 的范围内返回 .csv 列中的值的数量【英文标题】:How to return the number of values in .csv column within a range in r 【发布时间】:2022-01-01 23:14:04 【问题描述】:

我有一个文件,其中第二列包含感兴趣的值。我正在尝试遍历一组数字 (n) 并让它计算使用 R 在该列中出现 n-5:n+5 范围内的值的次数。然后我希望将其输出到.csv(但到目前为止尚未将其写入代码)。

我一直在使用:

library(expss)
SNP_file <- read.csv("testdata.csv", header = FALSE, sep = "\t")
for (n in 31130:31150) 
  SNP_Number <- 0
  SNP_Number <- count_if(n-5:n+5, SNP_file$V2)
  df <- data.frame(column1 = c(n), column2 = c(SNP_Number))
  print(df)
  


在 testdata.csv 中,第二列有 31140 和 31141 的值。

这会返回如下输出:


  column1 column2
1   31130       1
  column1 column2
1   31131       1
  column1 column2
1   31132       1
  column1 column2
1   31133       1
  column1 column2
1   31134       1
  column1 column2
1   31135       1
  column1 column2
1   31136       1
  column1 column2
1   31137       1
  column1 column2
1   31138       1
  column1 column2
1   31139       1
  column1 column2
1   31140       2
  column1 column2
1   31141       3
  column1 column2
1   31142       3
  column1 column2
1   31143       3
  column1 column2
1   31144       3
  column1 column2
1   31145       3
  column1 column2
1   31146       3
  column1 column2
1   31147       3
  column1 column2
1   31148       3
  column1 column2
1   31149       3
  column1 column2
1   31150       3

但这首先是错误地记录了一个初始值 1,其中应该是一个值 0,每次 n 超过 testdata.csv 中的另一个值时它只会增加,并且一旦 n 没有回落到 0 n-5:n+5 范围内的值。

所以它应该是这样的:


  column1 column2
1   31130       0
  column1 column2
1   31131       0
  column1 column2
1   31132       0
  column1 column2
1   31133       0
  column1 column2
1   31134       0
  column1 column2
1   31135       1
  column1 column2
1   31136       2
  column1 column2
1   31137       2
  column1 column2
1   31138       2
  column1 column2
1   31139       2
  column1 column2
1   31140       2
  column1 column2
1   31141       2
  column1 column2
1   31142       2
  column1 column2
1   31143       2
  column1 column2
1   31144       2
  column1 column2
1   31145       2
  column1 column2
1   31146       1
  column1 column2
1   31147       0
  column1 column2
1   31148       0
  column1 column2
1   31149       0
  column1 column2
1   31150       0

我在这里做错了什么?

【问题讨论】:

我不明白。对于n=31130,您想知道第二列中有多少值在31130-531130+5 之间,那么对于n=3113131131-531131+5 之间有多少值等等?另外,你能发布dput(head(SNP_file$V2, 20))的输出吗? 是的,就是这样!因此,对于 n = 31130,有多少个值的实例在 31125 到 31135 之间,对于 n = 31131,在 31126 到 31136 之间。dput(head(SNP_file$V2, 20)) 返回:c(22761L, 31140L, 31141L, 36701L, 44108L, 46917L, 51958L, 53661L, 119844L, 119845L, 184836L, 195026L, 249733L, 251024L, 271357L, 287257L, 360638L, 382559L, 384590L, 399027L) 【参考方案1】:

试试这个:

vec <- c(22761L, 31140L, 31141L, 36701L, 44108L, 46917L, 51958L, 53661L,  119844L, 119845L, 184836L, 195026L, 249733L, 251024L, 271357L,  287257L, 360638L, 382559L, 384590L, 399027L)

sapply(31130:31150, function(z) sum( (z-5) <= vec & vec <= (z+5) ))
#  [1] 0 0 0 0 0 1 2 2 2 2 2 2 2 2 2 2 1 0 0 0 0

【讨论】:

效果很好!非常感谢! 如果您确信答案可以解决您的问题,请accept it。谢谢!

以上是关于如何在 r 的范围内返回 .csv 列中的值的数量的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个列中找到最常用的值?

如何使用 CSVHelper 更新现有 CSV 文件中特定列中的值?

如果列中的值小于特定值,如何转到csv文件中的特定列并打印整行

去掉 从R中的列中的值[重复]

七.Excel统计函数

LEETCODE - 938. 二叉搜索树的范围和