데이터 프레임에 깊이 당 샘플링 데이터가 있습니다. 이제 원래 깊이를 새 깊이로 보간해야합니다.이 깊이에 대한 정보는 다른 데이터 프레임에 있습니다. 따라서 필요한 것은 다음과 같습니다.
첫 번째 data.frame은 다음과 같습니다.
dat1 = data.frame(Samp = rep(letters[1:4], each = 4),
sam_top = seq(1:4),
sam_bot = seq(2,5),
value = runif(16),
stringsAsFactors = F)
나에게 준다 :
Samp sam_top sam_bot value
1 a 1 2 0.75864637
2 a 2 3 0.44056410
3 a 3 4 0.18105700
4 a 4 5 0.67938119
5 b 1 2 0.75444497
6 b 2 3 0.59411439
7 b 3 4 0.11755459
8 b 4 5 0.70143005
9 c 1 2 0.44234565
10 c 2 3 0.82872824
첫 번째에 대한 새로운 깊이가있는 두 번째 데이터 프레임은 다음과 같습니다.
dat2 <- read.table(text = "Samp sam_new_bot
a 6
b 7
c 6
d 7.5", header = TRUE)
> dat2
Samp sam_new_bot
1 a 6.0
2 b 7.0
3 c 6.0
4 d 7.5
결과는 다음과 같아야합니다.
Samp sam_top sam_bot value
1 a 1 2 0.75864637
2 a 2 3 0.44056410
3 a 3 4 0.18105700
4 a 4 5 0.67938119
5 a 5 6 0.67938119
5 b 1 2 0.75444497
6 b 2 3 0.59411439
7 b 3 4 0.11755459
8 b 4 5 0.70143005
9 b 5 7 0.70143005
10 c 1 2 0.44234565
data.frame에는 고정 된 간격이 없으므로 서로간에 임의의 수의 Samp가있을 수 있습니다.
업데이트 : 다음 을 사용하여 행을 삽입 할 수 있습니다.
do.call(rbind, by(dat1, dat1$Samp, rbind, dat1[1,]))
이제 내 이해는 dat1 [1] 부분을 x의 함수로 대체해야한다는 것입니다.하지만 어떻게 든 함께 모으지 않습니다.
dat1
및 의 정의 사용 dat2
:
dat3 <- with(dat2,data.frame(Samp, sam_top=NA, sam_bot=sam_new_bot, value=NA))
dat3 <- dat3[dat3$Samp %in% dat1$Samp,] # only use Samp in dat1
dat3$sam_top <- aggregate(sam_bot~Samp,dat1,tail,1)$sam_bot
dat3$value <- aggregate(value~Samp,dat1,tail,1)$value
final <- rbind(dat1,dat3)
final <- final[order(final$Samp,final$sam_top),]
생성 :
final
# Samp sam_top sam_bot value
# 1 a 1 2 0.7586464
# 2 a 2 3 0.4405641
# 3 a 3 4 0.1810570
# 4 a 4 5 0.6793812
# 11 a 5 6 0.6793812
# 5 b 1 2 0.7544450
# 6 b 2 3 0.5941144
# 7 b 3 4 0.1175546
# 8 b 4 5 0.7014301
# 12 b 5 7 0.7014301
# 9 c 1 2 0.4423456
# 10 c 2 3 0.8287282
# 13 c 3 6 0.8287282
행 이름은 다르지만 중요하지 않기를 바랍니다.
이 코드는 dataframe 만들어 dat3
당신에 따라 별도의 행에 대한 템플릿으로 dat2
, 다음 세트 sam_top
와 value
당신의 기준에 따라 템플릿을, 다음 원래 그 행을 추가 dat1
, 만들을 final
, 당신의 결과와 일치하는 마지막 재정렬. 의 tail(...)
함수를 사용 aggregate(...)
하여 시리즈의 마지막 행을 추출합니다.
마지막으로, your dat2
has a Samp="d"
, your dat1
does not; 이것이 두 번째 코드 라인의 이유입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다