我需要在数据框中执行一些操作,因为有点特别,我不知道如何执行它们。以下是一些数据:
x<-seq(1:250)
pos<-seq(1000,1249,1)
pval<-c(rep(0.25,40),rep(0.0001,10),rep(0.14,100),rep(0.0005,20),rep(0.58,10),rep(0.00001,20),rep(0.85,50))
len<-rep(0.1,250)
nsnp<-rep(33.7,250)
data<-data.frame(cbind(x,pos,pval,len,nsnp))
好吧,我的问题是我需要从这个创建一个数据框,但我需要根据数据$ pval组合连续的行。也就是说,按数据$ x排序我需要连接所有具有数据$ pval&lt; = 0.05的连续元素。并执行:
由于在我们的数据框(数据)中有3个连续数据为$ x的区域,因此最终数据库应如下所示:
pos len nsnp
[1,] 1044.5 1 337
[2,] 1159.5 2 674
[3,] 1189.5 2 674
这个数字可以这样获得:
data2<-subset(data,data$pval<=0.05)
mean(data2$pos[data2$pos>=1040 & data2$pos<=1049])
sum(data2$len[data2$pos>=1040 & data2$pos<=1049])
sum(data2$nsnp[data2$pos>=1040 & data2$pos<=1049])
mean(data2$pos[data2$pos>=1150 & data2$pos<=1169])
sum(data2$len[data2$pos>=1150 & data2$pos<=1169])
sum(data2$nsnp[data2$pos>=1150 & data2$pos<=1169])
mean(data2$pos[data2$pos>=1180 & data2$pos<=1199])
sum(data2$len[data2$pos>=1180 & data2$pos<=1199])
sum(data2$nsnp[data2$pos>=1180 & data2$pos<=1199])
我希望现在我的问题得到了解。我的问题是我找不到如何根据数据$ x选择连续的行。我的例子中的这些连续行是:pos 1040-1049,pos 1150-1169和pos 1180-1199。
答案 0 :(得分:2)
似乎可以通过pval
进行分组来完成,因此使用dplyr
,
library(dplyr)
data2 %>%
group_by(pval) %>%
summarise(pos = mean(pos), len = sum(len), nsnp = sum(nsnp))
# A tibble: 3 × 4
# pval pos len nsnp
# <dbl> <dbl> <dbl> <dbl>
#1 1e-05 1189.5 2 674
#2 1e-04 1044.5 1 337
#3 5e-04 1159.5 2 674
但是,如果情况并非如此,那么我们可以按以下方式按连续pos
值进行分组,
library(dplyr)
data2 %>%
group_by(new = cumsum(c(1, diff(pos) != 1))) %>%
summarise(pos = mean(pos), len = sum(len), nsnp = sum(nsnp))
# A tibble: 3 × 4
# new pos len nsnp
# <dbl> <dbl> <dbl> <dbl>
#1 1 1044.5 1 337
#2 2 1159.5 2 674
#3 3 1189.5 2 674
答案 1 :(得分:0)
您可以将数据框d子集化为:
d[d$variable <= 0.05,]
Google R refcard,用于分组数据框的方法。阅读基本的R指南以完成其余的工作。
祝你好运