데이터 프레임이 있습니다. 각 행이 주어진 행에서 얼마나 멀리 떨어져 있는지 계산하고 싶습니다. 첫 번째 행에 대해 살펴 보겠습니다. 내가 무엇을하고자하면 다음과 같다데이터 프레임의 행 사이의 계산 차이
> sampleDF
X1 X2 X3
1 5 5
4 2 2
2 9 1
7 7 3
: 다음과 같이 데이터 프레임하자
- 을 계산 1 행의 차이 & 다른 사람 :
sampleDF[1,]-sampleDF[2,]
- 는 절대 값을 고려 :
abs(sampleDF[1,]-sampleDF[2,])
- 차이가 새로 형성된 데이터 프레임의 합계를 계산합니다.
rowSums(newDF)
전체 데이터 프레임에 대해 이렇게하십시오.
newDF <- sapply(2:4,function(x) { return (abs(sampleDF[1,]-sampleDF[x,]));})
이 그 결과에 문제를 야기는 전치 목록입니다. 나는이 오류가 이유는 무엇입니까 :
> class(newDF)
[1] "data.frame"
> rowSums(newDF)
Error in base::rowSums(x, na.rm = na.rm, dims = dims, ...) :
'x' must be numeric
> newDF
X1 X2 X3
1 3 3 3
2 1 4 4
3 6 2 2
>
퍼즐 1 : rowSums을 계산하는 동안 따라서,
newDF <- as.data.frame(t(sapply(2:4,function(x) { return (abs(sampleDF[1,]-sampleDF[x,]));})))
는 그러나 또 다른 문제가 발생? 나는 newDF [1,1]가 숫자가 아닌 &리스트라는 것을 알았다. 그것 때문에입니까? 어떻게 sapply &의 결과가 숫자의 단순한 데이터 프레임이라는 것을 보장 할 수 있습니까?
은 그래서 함수 내에서 수정 글로벌 데이터 프레임 &을 만들 진행 :
sapply(2:4,function(x) { newDF <<- as.data.frame(rbind(newDF,abs(sampleDF[1,]-sampleDF[x,])));})
> newDF
X1 X2 X3
2 3 3 3
3 1 4 4
4 6 2 2
> rowSums(outDF)
2 3 4
9 9 10
>
이 예상되고있다.
퍼즐 2 : 더 깨끗한 방법이 있나요? 데이터 프레임의 모든 행에 대해이 작업을 수행하려면 어떻게해야합니까? (위의 그림은 행 1과의 "거리"에 대한 것입니다.) 다른 행에도이 작업을 수행해야합니까? 루프를 실행하는 것이 유일한 옵션입니까?
설명해 주셔서 감사합니다. 나는 거리를 계산해야한다는 것을 알았지 만 R이 거리를 계산할 무언가를 가지고 있는지 체크하지 않았다. 함수 내에서 unlist도 내 문제를 해결하는 데 도움이됩니다. 이제 거리를 계산하기 위해 사용자 지정 방법을 사용할 수 있는지 확인합니다. –