유전자 사이의 거리를 계산하는 데이터 세트가 있습니다. 여기에는 현재 행 / 유전자와 다음 행의 거리를 제공하기 위해 현재 행의 'bp.snp'열에서 아래 한 유전자 행의 'bp.snp'열을 빼는 것이 포함됩니다.
그러나 새로운 염색체가 시작될 때마다 빼기가 수행되는 것을 원하지 않습니다. for 루프에서 이것을 어떻게 설명 할 수 있습니까?
내 데이터는 다음과 같습니다.
Gene Chromosome bp.snp
ACE 1 1
NOTCH 1 2
BRCA 1 3
HER 2 7000
GABA 2 7001
P53 3 20000
APX1 3 20001
출력 열이 다음과 같이 보이기를 원합니다.
Gene Chromosome bp.snp distance
ACE 1 1 1
NOTCH 1 2 1
BRCA 1 3 0/NA
HER 2 7000 1
GABA 2 7001 0/NA
P53 3 20000 1
APX1 3 20001 1
따라서 각 염색체 변경에 대해 bp.snp 빼기를 수행하는 것을 무시합니다.
내 코드는 현재 다음과 같습니다.
df$distance <- NA
for(i in 1:(nrow(df) - 1)) {
df$distance[i] = df$bp.snp1[i+1] - df$bp.snp1[i]}
본질적으로 코드에 '염색체 열이 1 씩 증가 할 때마다 루프에서 빼기를 수행하지 않음'을 요청하는 방법을 잘 모르겠습니다.
당신은 사용할 수 있습니다 ave
및 diff
위해 거리를 계산 당 Chromosome
.
df$distance <- ave(df$bp.snp, df$Chromosome, FUN=function(x) c(diff(x), NA))
df
# Gene Chromosome bp.snp distance
#1 ACE 1 1 1
#2 NOTCH 1 2 1
#3 BRCA 1 3 NA
#4 HER 2 7000 1
#5 GABA 2 7001 NA
#6 P53 3 20000 1
#7 APX1 3 20001 NA
또는 단순히 모두의 차이를 계산하고 차이 NA
가있는 장소에서로 설정합니다 Chromosome
.
df$distance <- c(diff(df$bp.snp), NA)
df$distance[c(diff(df$Chromosome) > 0, FALSE)] <- NA
# Gene Chromosome bp.snp distance
#1 ACE 1 1 1
#2 NOTCH 1 2 1
#3 BRCA 1 3 NA
#4 HER 2 7000 1
#5 GABA 2 7001 NA
#6 P53 3 20000 1
#7 APX1 3 20001 NA
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다