2016-11-10 4 views
2

다음과 같은 데이터 프레임이 있으며 조건에 따라 데이터 프레임의 문자를 숫자로 바꾸어 다른 데이터 프레임을 생성하려고합니다.R 문자열을 데이터 프레임의 숫자로 변경하십시오.

condition: 
GD 5 
O 4.5 
AV 3 
B 2.5 

dataframe: 
Name Peter Paul Mary Chan Jose 
Nokia B  O  O  GD  GD 
iPhone AV  O  O  O  O 
Moto AV  AV  O  O  AV 
HTC  B  O  AV  AV  AV 

dput: 
structure(list(Name = c("Nokia", "iPhone", "Moto", "HTC"), Peter = 
c("B", "AV", "AV", "B"), Paul = c("O", "O", "AV", "O"), Mary = 
c("O", "O", "O", "AV"), Chan = c("GD", "O", "O", "AV"), Jose = 
c("GD", "O", "AV", "AV")), .Names = 
c("Name", "Peter", "Paul", "Mary", "Chan", "Jose"), class = "data.frame", row.names = c(NA, -4L)) 

desired output: 
Name Peter Paul Mary Chan Jose 
Nokia 2.5  4.5  4.5  5  5 
iPhone 3  4.5  4.5  4.5  4.5 
Moto 3  3  4.5  4.5  3 
HTC  2.5  4.5  3  3  3 

도움 주셔서 감사합니다.

답변

3

하나의 옵션은 열을 반복하여 match를 사용

'keyval는'V1 '과'V2 '를'키 '등과'값 '항목과 함께'data.frame을 '이다
df1[-1] <- lapply(df1[-1], function(x) keyval$v2[match(x, keyval$v1)]) 
df1 
# Name Peter Paul Mary Chan Jose 
#1 Nokia 2.5 4.5 4.5 5.0 5.0 
#2 iPhone 3.0 4.5 4.5 4.5 4.5 
#3 Moto 3.0 3.0 4.5 4.5 3.0 
#4 HTC 2.5 4.5 3.0 3.0 3.0 

.

7

나는 condition의 구조가 무엇인지 모르겠지만, 나는 단순히 unlist/match 데이터가 설정 것 같은

condition <- setNames(c(5, 4.5, 3, 2.5), c("GD", "O", "AV", "B")) 

로 명명 된 벡터의 가정 다시

를 넣어
df[-1] <- condition[match(unlist(df[-1]), names(condition))] 
df 
#  Name Peter Paul Mary Chan Jose 
# 1 Nokia 2.5 4.5 4.5 5.0 5.0 
# 2 iPhone 3.0 4.5 4.5 4.5 4.5 
# 3 Moto 3.0 3.0 4.5 4.5 3.0 
# 4 HTC 2.5 4.5 3.0 3.0 3.0 
1

이 또한 작동 (CDF는 조회 테이블 임) :

cbind.data.frame(Name=df[,1], matrix(cdf$value[match(as.matrix(df[-1]), cdf$condition)], 
            nrow=nrow(df), dimnames=list(NULL, names(df[-1])))) 
는출력이있는

Name Peter Paul Mary Chan Jose 
1 Nokia 2.5 4.5 4.5 5.0 5.0 
2 iPhone 3.0 4.5 4.5 4.5 4.5 
3 Moto 3.0 3.0 4.5 4.5 3.0 
4 HTC 2.5 4.5 3.0 3.0 3.0 
관련 문제