2017-05-09 2 views
1

4 개의 열이있는 데이터 프레임을 다시 포맷하려고합니다. 그러나 하나의 열 (dem_profile_description)에는 ~ 20 개의 변수가 있으며 열로 변경하려고합니다. 나는 모양 패키지를 다운로드했다. 그러나 나는이와 끝까지r에 reshape를 사용하여 열 값을 열로 전환하는 방법은 무엇입니까?

library(reshape2) 
census3 <- dcast(census2, "dem_profile_field" + "Community" ~ 
"dem_profile_description", value.var = "dem_profile_data")    

:

dem_profile_field Community (1) (2) (3) (4) (5) (6) 
dpsf0010042  Gnar  4 
dpsf0010043  Yoke   20  
dpsf0010044  Law     5 5 
dpsf0010046  Ark      24 
dpsf0010047  Riverland      30 

내 코드는 이것이다 :

dem_profile_field dem_profile_description dem_profile_data Community 
dpsf0010042  Female 10 to 14 years(1) 4    Gnar 
dpsf0010043  Female 15 to 19 years(2) 20    Yoke 
dpsf0010044  Female 20 to 24 years(3) 22    Law 
dpsf0010045  Female 25 to 29 years(4) 23    Law 
dpsf0010046  Female 30 to 34 years(5) 24    Ark 
dpsf0010047  Female 35 to 39 years(6) 30    Riverland 

내가이 원하는 :

내 dataframe의 처음 몇 줄

이있다 :

dem_profile_field Community dem_profile_description 
1     Community  2 
+0

처럼 작동까요? –

+0

@ 42-이 오류가 발생합니다 : % 이름 (데이터)의 value.var %의 오류 : 'dem_profile_data'객체가 없습니다. –

+0

왜 행 4에 5가 2 개 있습니까? –

답변

2

당신은 기본적으로 거기 - 그냥 dcastformula 통화의 인용을 제외해야 (당신은 여전히 ​​value.var 그들을 필요) :

census3 <- dcast(census2, dem_profile_field + Community ~ 
        dem_profile_description, value.var = "dem_profile_data") 

당신이 수도 있습니다 할 원하는 이름을 얻으려면 :

names_to_replace <- grepl("(\\(.*\\))", names(census3)) 
names(census3)[names_to_replace] <- str_extract(names(census3)[names_to_replace], "\\(.*\\)") 
+0

정말 고마워요! 그것은 일했다!! –

+0

아무런 문제없이 원하는 코드를 얻을 수 있도록 내 코드를 편집했습니다. –

0

데이터를 이전하기위한 새로운 패키지를 시작한 경우라면 tidyr을 대신 사용해 볼 수 있습니다. 구문은보다 간단하며 'tidyverse'의 다른 데이터 조작 패키지와 잘 결합됩니다.

귀하의 예는 수식의 모든 이중 인용 부호를 생략하면 어떻게됩니까이

library(tidyr) 

df <- data.frame(dem_profile_field = 
      c("dpsf0010042", 
      "dpsf0010043", 
      "dpsf0010044", 
      "dpsf0010045", 
      "dpsf0010046", 
      "dpsf0010047"), 
      dem_profile_description = 
      c("Female 10 to 14 years(1)", 
      "Female 15 to 19 years(2)", 
      "Female 20 to 24 years(3)", 
      "Female 25 to 29 years(4)", 
      "Female 30 to 34 years(5)", 
      "Female 35 to 39 years(6)"), 
      dem_profile_data = 
      c(4, 
      20, 
      22, 
      23, 
      24, 
      30), 
      Community = 
      c("Gnar", 
      "Yoke", 
      "Law", 
      "Law", 
      "Ark", 
      "Riverland"), 
      stringsAsFactors = FALSE) 

df_transposed <- df %>% 
    spread(dem_profile_description, dem_profile_data) 
관련 문제