如何 return r 范围内的 .csv 列中的值数
How to return the number of values in .csv column within a range in r
我有一个文件,其中第二列包含感兴趣的值。我试图遍历一组数字 (n) 并让它计算 n-5:n+5 范围内的值在该列中使用 R 出现的次数。然后我希望将其输出到.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。
这 returns 输出如下:
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 中的另一个值时它只会增加,并且不会回落到 0一旦 n 在 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
我做错了什么?
试试这个:
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
我有一个文件,其中第二列包含感兴趣的值。我试图遍历一组数字 (n) 并让它计算 n-5:n+5 范围内的值在该列中使用 R 出现的次数。然后我希望将其输出到.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。
这 returns 输出如下:
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 中的另一个值时它只会增加,并且不会回落到 0一旦 n 在 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
我做错了什么?
试试这个:
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