2016-10-19 4 views
0

데이터 프레임은 아래와 같습니다. Var_1 .. Var_50 레이블이 붙은 50 개 이상의 변수가 포함 된 데이터 집합이 있습니다. 50 개의 변수 중 하나에 국가 코드 (영국 또는 미국)가 있습니다. 데이터 프레임은 var_5 = "UK"이면 var_4가 항상 상점 번호를 포함하도록 구성됩니다.R 프로그래밍 : 조건에 따라 이전 열 값 추출

작성하려는 코드는 다음과 같습니다. - var_5 = UK이면 country = "var_5"및 store = "var_4"입니다. 루프를 설정하여 복사 할 필요가 없으므로이 50 번 붙여 넣으면 멋질 것입니다! 내가 원하는 무엇

ID Brand Var_1  Var_2  Var_3  Var_4  Var_5 
1 Soaps Supervisor Quantity StoreK UK   Owner 
2 Shampoo StoreZ  US   
3 Oil  Material StoreY  UK  Supplier 

는 데이터 프레임 아래이 내 질문을 명확하게

ID Brand Var_1  Var_2  Var_3  Var_4 Country StoreID 
1 Soaps Supervisor Quantity StoreK UK  UK   StoreK 
2 Shampoo StoreZ  US       US   StoreZ 
3 Oil  Material StoreY  UK     UK   StoreY 

희망입니다.

+1

데이터 세트를 포맷하십시오. 열이 어디에서 끝나고 새 열이 시작되는지는 명확하지 않습니다. 예상 출력 – akrun

답변

0

국가 및 상점 정보가 포함 된 열이 이미 있으므로 추가 열을 만들고 이름을 바꿀 필요가 없습니다.

the.data <- data.frame(Brand = c("Soap", "Oil", "Mail"), var1 = rnorm(3), var2 = c("store_K", "store_xs", "store_k"), var3 = c("UK", "AL", "USA")) 
# subset your data frame and select rows that are UK or US 
uk.data <- the.data[grep("UK|US", the.data$var3), ] 
# rename the columns 
colnames(uk.data)[3:4]<- c("Store", "Country") 
+0

ID 브랜드 \t VAR_1 \t VAR_2 \t Var_3 \t VAR_4 1 비누 \t 감독자 \t 수량과 함께 예를 보여주기 위해'dput'를 사용 \t StoreK \t \t 영국 2 샴푸 \t StoreZ \t \t 미국 3 오일 \t 재료 \t 층 \t \t 영국 –

0

당신이 시도 할 수 :

data <- data.frame(ID = c(1,2,3), Brand = c("Soaps", "Shampoo", "Oil"), 
         Var_1 = c("Supervisor", "Storez", "Material"), 
         Var_2 = c("Quantity", "US", "StoreY"), 
         Var_3 = c("StoreK", "", "UK"), 
         Var_4 = c("UK", "", "")) 


tmp <- data.frame(t(apply(data, 1, function(x) { pos = grep("UK|US", x) 
               if (length(pos)) {c(x[pos], x[pos - 1])} 
               else { c("", "") } 
               }))) 

names(tmp) <- c("Country", "Store") 
data <- cbind(data, tmp) 
+0

안녕하세요, 귀하의 답변에 감사드립니다. 그것은 나를 아래의 오류 준다. –

+0

오류 : 경고 메시지 : '[.data.table' (out,, ': ='(c ("Country", "Store"), as.data.table (tmp))) : 제공된 2 열 값 (12990 미사용)의 목록 (길이 12992)이 할당 됨 –

+0

안녕하세요, sri, 지금 사용해보세요! – User2321

관련 문제