SQL 조인과 유사하게 다른 데이터 프레임의 내용으로 데이터 프레임 조작

StackOverflow https://stackoverflow.com/questions/2241583

  •  19-09-2019
  •  | 
  •  

문제

내용이 포함된 데이터 프레임이 있다고 가정해 보겠습니다.

Trial Person Time
1     John   1.2
2     John   1.3
3     John   1.1
1     Bill   2.3
2     Bill   2.5
3     Bill   2.7

내용이 포함된 또 다른 데이터 프레임:

Person Offset
John   0.5
Bill   1.0

두 번째 프레임의 적절한 값을 기반으로 원본 프레임을 수정하고 싶습니다.다른 언어나 SQL로 이 작업을 쉽게 수행할 수 있으며 for 루프 등을 사용하여 관리할 수 있을 것이라고 확신합니다. 하지만 R에서 볼 수 있는 다른 모든 항목을 보면 이 작업을 하나의 구문으로 수행하기 위한 특별한 구문이 있는 것 같습니다. -정기선.그렇다면 어떻게?그렇지 않다면 루프를 사용하여 어떻게 수행할 수 있는지 보여줄 수 있습니까?R에서는 어떤 값이든 간단히 추출하고 조작할 수 있는 놀라운 기능이 있기 때문에 아직 R에서 루프를 학습해 본 적이 없습니다.

참고로 출력은 다음과 같습니다.

Trial Person Time
1     John   0.7
2     John   0.8
3     John   0.6
1     Bill   1.3
2     Bill   1.5
3     Bill   1.7 
도움이 되었습니까?

해결책

많은 가능성이 있습니다.다음은 간단한 사용 방법입니다. merge() 확대된 항목에서 간단한 열 단위 뺄셈 data.frame:

R> DF1 <- data.frame(trial=rep(1:3,2), \
                     Person=rep(c("John","Bill"), each=3), \
                     Time=c(1.2,1.3,1.1,2.3,2.5,2.7))
R> DF2 <- data.frame(Person=c("John","Bill"), Offset=c(0.5,1.0))
R> DF <- merge(DF1, DF2)
R> DF
  Person trial Time Offset
1   Bill     1  2.3    1.0
2   Bill     2  2.5    1.0
3   Bill     3  2.7    1.0
4   John     1  1.2    0.5
5   John     2  1.3    0.5
6   John     3  1.1    0.5
R> DF$NewTime <- DF$Time - DF$Offset
R> DF
  Person trial Time Offset NewTime
1   Bill     1  2.3    1.0     1.3
2   Bill     2  2.5    1.0     1.5
3   Bill     3  2.7    1.0     1.7
4   John     1  1.2    0.5     0.7
5   John     2  1.3    0.5     0.8
6   John     3  1.1    0.5     0.6
R> 

다른 팁

짧막 한 농담:

transform(merge(d1,d2), Time=Time - Offset, Offset=NULL)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top