2014-11-26 2 views
0

dplyr을 사용하여 다음을 복제하려고합니다.dplyr을 독립적으로 사용하는 데이터 집합의 하위 집합 변수

set.seed(123) 
my_data <- data.frame(time = c(4:13, 4:13), 
         var1 = rep(c("a", "b"), each=10), 
         var2 = rnorm(20)) 

my_data_new <- with(my_data, 
         data.frame (time = time[var1 =="a"], 
            var2a = var2[var1 == "a"], 
            var2b = var2[var1 == "b"])) 

나는() 변환 마법과 유사한 구문을 시도하고

Error: wrong result size (10), expected 20 or 1 

감사합니다 다음과 같은 오류 메시지가 도착했습니다!

+0

을 열 이름을 변경 dplyr에서 rename를 사용할 수 있지만 그것은 매우 우아하지 않습니다 즉. var2a =. $ var2 [. $ var1 == 'a'], var2b =. $ var2 [. $ var1 == 'b']))' – akrun

+0

정말 잘못된 도구를 사용하고있는 것 같습니다. 당신은 정말로 당신의 데이터를 재 형성하고 있습니다. 따라서'reshape2' 또는'gather()/spread()'에서'tidyr'의'melt()/cast()'가 더 적절할 것입니다. – MrFlick

답변

5

library(tidyr) 
res <- spread(my_data, var1, var2) 
colnames(res) <- colnames(my_data_new) 
identical(res, my_data_new) 
#[1] TRUE 

을 시도하거나 당신은 당신은`사용 do` 수 (@ 리차드 Scriven에 의해 제안)

library(dplyr) 
library(tidyr) 
spread(my_data, var1, var2)%>% 
         rename(var2a=a, var2b=b) 
+0

당신은 정말로'dplyr'-y이고'spread> 후에'%> rename (var2a = a, var2b = b)'일 수 있습니다. –

+0

@RichardScriven 감사합니다. – akrun