2014-04-16 3 views
0

저는 R 프로젝트에서 주파수를 각각 비교하려고합니다. 본질적으로 슬롯 1에 위치 번호가있는 11852X3 열 데이터 프레임과 두 번째 열에서 1-11852의 고유 값, 그리고 3 열의 다른 위치에있는 동일한 고유 값 집합입니다.위치에 따라 R 데이터 프레임의 두 열의 값 사이에 수학 연산을 수행하려면 어떻게해야합니까?

2 열과 3 열의 값이 겹쳐 있습니다. 가장 왼쪽의 위치 번호 (1 열)를 기준으로이 두 값의 차이를 찾고 다른 데이터 프레임에 저장하려고합니다. 따라서 두 번째 열의 값이 2017이고 그 다음 세 번째 열의 위치가 2017 인 경우 새 데이터 프레임은 2017의 항목을 가지며 동일한 위치를 가지므로 값은 0입니다. 2 열의 값이 5276이고 두 번째 열의 값이 5276 인 경우, 새 데이터 프레임의 값은 70이됩니다.

방법에 대한 지침이 마음에들 것입니다. 이것을하기 위해. 감사.

+6

안녕하세요. ** 최소의 독립적 인 예 **를 제공해주십시오. 이 링크에서 일반적인 아이디어와 R : [** here **] (http://stackoverflow.com/help/mcve), [** 여기 **] (http : // www. sscce.org/), [** 여기 **] (http://adv-r.had.co.nz/Reproducibility.html), [** 여기 **] (http://stackoverflow.com/ 질문/5963269/how-to-make-a-r-reproducible-example/5963610 # 5963610). ** 시도한 코드 **도 표시해야합니다. 건배. – Henrik

답변

2

아래 코드가 귀하에게 유용 할 경우 알려주십시오. 세 번째 열의 숫자가 두 번째 열의 숫자보다 큰 경우 코드는 음수 값을 생성합니다.

#Generate simulated data 
n = 20 
x <- data.frame(c1 = c(1:n), c2 = sample(n),c3 = sample(n)) 

#Calculate diff in position by taking difference in order 
x$diff = order(x$c3)- order(x$c2) 
#Reassign difference to its correct position 
x$diff[order(x$c2)] <- x$diff 
x 
    c1 c2 c3 diff 
1 1 12 8 4 
2 2 11 5 9 
3 3 7 4 6 
4 4 15 3 12 
5 5 19 12 12 
6 6 13 1 12 
7 7 9 14 12 
8 8 18 16 7 
9 9 8 7 -8 
10 10 16 20 -2 
11 11 6 11 1 
12 12 4 6 -9 
13 13 14 10 -6 
14 14 5 17 -12 
15 15 10 18 -2 
16 16 1 15 -10 
17 17 3 19 -13 
18 18 2 13 2 
19 19 17 9 -5 
20 20 20 2 -10