문제
n 행이있는 data.frame이 있다고 가정합니다. 그만큼 id
열에는 10 개의 고유 값이 있습니다. 이 모든 값은 1e7보다 큰 정수입니다. 이름을 1-10으로 번호로 바꾸고이 새 ID를 내 Data.Frame의 열로 저장하고 싶습니다.
또한 쉽게 결정하고 싶습니다 1) id
주어진 id.new
그리고 2) id.new
주어진 id
.
예를 들어:
> set.seed(123)
> ids <- sample(1:1e7,10)
> A <- data.frame(id=sample(ids,100,replace=TRUE),
x=rnorm(100))
> head(A)
id x
1 4566144 1.5164706
2 9404670 -1.5487528
3 5281052 0.5846137
4 455565 0.1238542
5 7883051 0.2159416
6 5514346 0.3796395
해결책
이 시도:
A$id.new <- match(A$id,unique(A$id))
추가 의견 :가치 테이블을 얻으려면 :
rbind(unique(A$id.new),unique(A$id))
다른 팁
요인 사용 :
> A$id <- as.factor(A$id)
> A$id.new <- as.numeric(A$id)
> head(A)
id x id.new
1 4566144 1.5164706 4
2 9404670 -1.5487528 10
3 5281052 0.5846137 5
4 455565 0.1238542 1
5 7883051 0.2159416 7
6 5514346 0.3796395 6
X가 이전 ID이고 새로운 ID를 원한다고 가정 해 봅시다.
> x <- 7883051
> as.numeric(which(levels(A$id)==x))
[1] 7
y가 새로운 ID라고 가정하고 오래된 ID를 원한다고 가정 해 봅시다.
> as.numeric(as.character(A$id[which(as.integer(A$id)==y)[1]]))
[1] 5281052
(위는 요인의 내부 코드가 5 인 ID의 첫 번째 값을 찾습니다. 더 나은 방법이 있습니까?)
여기에서 actor () / ordered ()를 사용할 수 있습니다.
R> set.seed(123)
R> ids <- sample(1:1e7,10)
R> A <- data.frame(id=sample(ids,100,replace=TRUE), x=rnorm(100))
R> A$id.new <- as.ordered(as.character(A$id))
R> table(A$id.new)
2875776 4089769 455565 4566144 5281052 5514346 7883051 8830172 8924185 9404670
6 10 6 8 12 10 13 10 10 15
그런 다음 AS.numeric ()을 사용하여 1 ~ 10에 매핑 할 수 있습니다.
R> A$id.new <- as.numeric(A$id.new)
R> summary(A)
id x id.new
Min. : 455565 Min. :-2.3092 Min. : 1.00
1st Qu.:4566144 1st Qu.:-0.6933 1st Qu.: 4.00
Median :5514346 Median :-0.0634 Median : 6.00
Mean :6370243 Mean :-0.0594 Mean : 6.07
3rd Qu.:8853675 3rd Qu.: 0.5575 3rd Qu.: 8.25
Max. :9404670 Max. : 2.1873 Max. :10.00
R>
한 가지 옵션은 hash
패키지:
> library(hash)
> sn <- sort(unique(A$id))
> g <- hash(1:length(sn),sn)
> h <- hash(sn,1:length(sn))
> A$id.new <- .get(h,A$id)
> head(A)
id x id.new
1 4566144 1.5164706 4
2 9404670 -1.5487528 10
3 5281052 0.5846137 5
4 455565 0.1238542 1
5 7883051 0.2159416 7
6 5514346 0.3796395 6
X가 이전 ID이고 새로운 ID를 원한다고 가정 해 봅시다.
> x <- 7883051
> .get(h,as.character(x))
7883051
7
y가 새로운 ID라고 가정하고 오래된 ID를 원한다고 가정 해 봅시다.
> y <- 5
> .get(g,as.character(y))
5
5281052
(이것은 때때로 요인을 사용하는 것보다 더 편리하거나 투명 할 수 있습니다.)
제휴하지 않습니다 StackOverflow