2016-10-18 4 views
1

나는 엑셀에있는 데이터를 가지고 있는데 이것을 데이터 프레임에 "데이터"라는 이름으로 저장하기 위해 읽었다. 마찬가지로 각 변수의 값 레이블과 코드는 별도의 시트에 이름 맵으로 표시됩니다. 나는이 시트를 읽고 그것을 "지도"라는 이름으로 데이터 프레임으로 저장한다. 파일에데이터 프레임의 숫자 코드에 레이블을 붙이는 것 - 효율적인 요소 사용하기

링크입니다 - 아래

https://www.wetransfer.com/downloads/bf0c5bfa88be20e4037d7fdc828ca66320161018075428/7f82a4 당신이 코드의 적은 수의 세포를 알 NA 함께있는 것입니다 경우 sheets-

library("readxl") 
data <- read_excel("data_v1.xlsx",sheet = "data") 
map <- read_excel("data_v1.xlsx",sheet = "map") 

을 읽을 수있는 코드입니다.

이제 맵 시트의 각 코드에 값 라벨을 데이터에 첨부하고 싶습니다. 나는 검색을하고 있었고, 이것을하는 방법 중 하나가 요인을 사용하는 것이라는 것을 깨달았다. 레벨과 라벨을 정의하는 곳. 레벨의 맵 파일에서 원래 변수 이름을 사용할 수 있으며 레이블의 경우 "_desc"가있는 변수를 접미어로 사용할 수 있습니다.

이 중 일부를 효율적으로 수행 할 수 있습니까? 우리가 루프 내에서 이것을 할 수 있다면 개별 변수에 대한 코드를 작성하는 대신에? 내가 첨부하고있는 데이터 파일에서 이것은 단지 샘플 일 뿐이며 원본 데이터 파일에는 레이블을 첨부하는 작업을 수행하는 데 필요한 100 개 이상의 변수가 있습니다.

마지막으로 변수 라벨을 첨부하려면 어떻게해야합니까? 나는

Q1은 "브랜드의 냄새처럼"라벨을 가져야한다 "브랜드의 맛처럼" Q3 라벨을 가져야한다 "브랜드의 포장처럼" Q2 라벨이 있어야합니다 Q4을 의미 "돈 가치"레이블이 있어야합니다.

변수 이름이있는 열과 변수 이름이있는 열이 각각 별도의 시트를 만드는 것이 좋을까요? 우리가 믿는 가치에 대해서만 작용할 수있는 요소로서 변수에 이러한 레이블을 어떻게 첨부할까요?

마지막으로이 레이블이 표시되어야하는 표/교차 표를 생성해야합니다. 이 값 + 변수 레이블이 표시되어야하는 차트.

감사합니다.

프라 사드는

+0

'Brand-desc'라는 이름은지도의 키 - 값에 접미사 '_desc'가있는 패턴을 사용합니다. 이 경우가 아니면 전체적으로 예외입니까? – roman

답변

0

이 반복적 인 작업을 수행하는 for 루프를 작성합니다. 데이터와 맵의 변수 이름이 같은지 확인해야합니다.귀하의 데이터를 사용할 수 없습니다, 그러나 나는 아래 작동해야한다고 생각합니다.

for (i in names(data)[which(is.element(names(data),names(map)))]){ 
    data[[i]] <- factor(data[[i]], 
           levels = na.omit(map[[i]]), 
           labels = na.omit(map[[paste0(i,"_desc")]])) 
} 

na.oimt는 NAs를 가질 행을 생략합니다.

+0

고맙습니다. – user1412

1

개념적 당신은 ... 판단의 문제입니다 거기에서 이동이

city_labels <- map$City_desc[match(data$City, map$City)] 

뭔가를해야합니다. 작업이 얼마나 반복적입니까? 어떤 것들은 다양합니다. 미리 할 수 ​​있겠습니까? 100을 가지고 있고 각각의 경우에 동일한 이름과 _desc를 갖는 접미사가있는 대응하는 변수가 있다면 나는 이것을 가정하는 함수를 작성합니다. :

위 내 댓글에 문제를 해결 한 후
getLabels <- function(var_name) { 
    map[,paste0(var_name, "_desc")][match(data[,var_name], map[,var_name])] 
} 

getLabels("City") 

, 당신은이 작업을 수행 할 수 있습니다

new_dat <- data.frame(lapply(names(data), getLabels)) 
names(new_dat) <- names(data) 
new_dat 

을 다음 당신은 당신의 번역 데이터 세트를 - 저장이 곳을 안전 :-)

+0

안녕하세요 로마, 네, 위의 귀하의 의견은 "Brand_desc"였음에 틀림 없습니다. 당신의 솔루션은 거의 존재하지만 변수의 레벨도 전세 라벨로 변환합니다. 레벨을 확인하는 경우 예. Q1의 경우 1,2,3 대신에 "동의 함", "아니요", "동의하지 않음"이 될 것입니다. 왜냐하면 레벨은 문자이기 때문에 어떤 평균/sd 등도 생성 할 수 없기 때문입니다. 주파수 + 평균을 사용하여 크로스 탭을 생성하려고하지만 평균을 생성 할 수 없습니다. 나는 어떤 식 으로든 우리가 코드 변수와 "_desc"변수를 맵 파일에서 조합하여 사용하면 문제를 해결할 수 있다고 생각합니다. 좋습니다. – user1412

+0

아, 알겠습니다. 그러나 분석에서 범주 형 데이터를 숫자로 취급하지는 않습니다. Rice & Gaines [ordered heterogeneity] (http://www.pnas.org/content/91/1/225.abstract)와 같이 주문한 카테고리로 분석해볼 수 있습니다. R은 우수 사례가 아닌 범주 형 데이터에서 숫자 연산을 수행하도록 허용하지 않습니다. – roman