2016-10-05 31 views
0

我需要在數據幀中執行一些操作,因爲有點特別,我不知道如何執行它們。下面是一些數據:選擇數據幀中的連續行... r

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 < = 0.05的連續元素。並執行:

  1. 數據$ PVAL <第一個和最後一個連續的元素之間數據$ POS的均值= 0.05
  2. 總和所有的連續數據$ LEN數據$ PVAL < = 0.05
  3. 總結所有的連續數據$ nsnp數據$ PVAL < = 0.05

因爲在我們的數據幀(數據)有與連續的數據$ X號3個地區,最終數據的基礎應該是這樣的:

 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

Hi Cebs。你嘗試了什麼? – Vincent

+0

對於第一部分我根據數據$ pval的子集。但是我不知道如何開始獲取連續行的操作。謝謝 – Cebs

+0

再一次,我不明白爲什麼我的問題是downvote ...是一個完美的合法問題,有一個例子,我相信很好解釋,請有人解釋我爲什麼... – Cebs

回答

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 
0

你可以一個子集數據框d像這樣:

d[d$variable <= 0.05,] 

谷歌[R的Refcard的子集化的數據幀的方法。閱讀一個基本的R指南,以實現其餘。

好運

+0

是的,我知道我可以子集。但我的問題不是如何子集,而是如何獲得連續行所需的操作。 – Cebs