2017-05-09 39 views
1

我試圖重新格式化一個有四列的數據框。但是,其中一列(dem_profile_description)有大約20個變量,我想將其更改爲列。我下載了重塑包。如何使用r中的整形將列值切換爲列?

我的數據幀的前幾行是這樣的:

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 

我想這一點:

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 

我的代碼是這樣的:

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

但我結束了這:

dem_profile_field Community dem_profile_description 
1     Community  2 
+0

如果你離開了公式中所有的雙引號會發生什麼? –

+0

@ 42-我得到這個錯誤:%name(data)中的value.var%中的錯誤:找不到對象'dem_profile_data' –

+0

爲什麼第4行中有兩個5? –

回答

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) 
相關問題