ホーム>source

変数が161個ある幅の広いテーブルがあり、変数が13個しかない狭いテーブルに変換したいと考えています。私の知る限り、 pivot_longer は使用できません年に追加の列を入力して、各行の幅の広いテーブルから特定の列のみを選択する必要があるためです。

空白のデータフレームから始めました。

<前>ウィズウィズ

次に、関連する各列を取得するためにforループを試しました(実際の解決策は1990年から2018年まで繰り返され、各変数は異なる列です)。

<前>ウィズウィズ

行ではなく各ベクトルを一度に実行しているため、結果は奇抜だと思います

<前>ウィズウィズ

forループの外で行を分離する場合、私が望む結果を正確に取得します。

<前>ウィズウィズ <前>ウィズウィズ

次に、 subset_gathered <- read.csv(text = "FIPS_State, Place_Code, Place_Name, Longitude, Latitude, County, Closest Metro, Year, Population_Density, Labor Force, Employed, Unemployed, Unemployment Rate", colClasses = c("character", "integer", "character", "numeric", "numeric", "character", "numeric","integer", "numeric", "integer", "integer", "integer", "numeric") ) を書いてみました関数、しかしそれは単一の行しか返しませんでした、そしてそれは5を返すはずでした( for(i in subset[1:5,]){ temp1990 <- c(subset$`FIPS State`[i], subset$`Place Code`[i], subset$Name[i], subset$longitude[i], subset$latitude[i], subset$COUNTY[i], subset$closest_metro[i], 1990, subset$density1990[i], subset$`Labor Force.90`[i], subset$Employed.90[i], subset$`Unemployment Level.90`[i], subset$`Unemployment Rate.90`[i]) subset_gathered[nrow(subset_gathered)+1,]<- temp1990 temp1991 <- c(subset$`FIPS State`[i], subset$`Place Code`[i], subset$Name[i], subset$longitude[i], subset$latitude[i], subset$COUNTY[i], subset$closest_metro[i], 1991, subset$density1991[i], subset$`Labor Force.91`[i], subset$Employed.91[i], subset$`Unemployment Level.91`[i], subset$`Unemployment Rate.91`[i]) subset_gathered[nrow(subset_gathered)+1,]<- temp1991 } にデータを持つ5つの行があります) )。

<前>ウィズウィズ <前>ウィズウィズ

私はここで正しい軌道に乗っていますか? forループの使用はPythonまたはSASで機能すると思いますが、 head(subset_gathered) FIPS_State Place_Code Place_Name Longitude Latitude County Closest.Metro Year Population_Density Labor.Force 1 1 1 1 1 1 124 124 124 124 124 2 1 1 1 1 1 124 124 124 124 124 3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 4 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 5 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 6 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> Employed Unemployed Unemployment.Rate 1 Abbeville city Abbeville city Abbeville city 2 Abbeville city Abbeville city Abbeville city 3 <NA> <NA> <NA> 4 <NA> <NA> <NA> 5 <NA> <NA> <NA> 6 <NA> <NA> <NA> Rでは常に正しい答えのようですが、それでも必要な結果を得ることができません。

dput:

<前>ウィズウィズ temp1990 <- c(subset$`FIPS State`[1], subset$`Place Code`[1], subset$Name[1], subset$longitude[1], subset$latitude[1], subset$COUNTY[1], subset$closest_metro[1], 1990, subset$density1990[1], subset$`Labor Force.90`[1], subset$Employed.90[1], subset$`Unemployment Level.90`[1], subset$`Unemployment Rate.90`[1]) subset_gathered[nrow(subset_gathered)+1,]<- temp1990 temp1991 <- c(subset$`FIPS State`[1], subset$`Place Code`[1], subset$Name[1], subset$longitude[1], subset$latitude[1], subset$COUNTY[1], subset$closest_metro[1], 1991, subset$density1991[1], subset$`Labor Force.91`[1], subset$Employed.91[1], subset$`Unemployment Level.91`[1], subset$`Unemployment Rate.91`[1]) subset_gathered[nrow(subset_gathered)+1,]<- temp1991
あなたの答え
  • 解決した方法 # 1

    難しさは、年がさまざまな方法で列名にエンコードされていることです。一部の列は4桁の年を使用し、一部の列は2桁の年を使用します。 (さらに、 subset の最後の3列の名前  スペルミスがあるようです。)

    年の命名の問題は、すべての変数を長い形式に再形成し、変数名から年を分離して完成させ、要求された形式に再形成することで解決できます。

    <前>ウィズウィズ ウィズウィズ ウィズウィズ 2018年の列名の修正

    再形成されたデータは、2018のいくつかの値を誤った列に表示するか、まったく欠落しています。 library(data.table) library(magrittr) melt(setDT(subset), id.vars = c("FIPS State", "Place Code", "Name", "longitude", "latitude", "COUNTY", "closest_metro"), measure.vars = patterns("\\d\\d$")) %>% .[, c("variable", "Year") := tstrsplit(variable, "(?<=density)|\\.", perl = TRUE)] %>% .[, Year := lubridate::ymd(Year, truncated = 2L) %>% year()] %>% dcast(... ~ variable) を検査する 、最後の3列に誤った列名が付けられているようです。これは

    を使用して列の名前を変更することで修正できます
    の
        FIPS State Place Code           Name longitude latitude        COUNTY closest_metro Year Employed Labor Force
      1:          1        124 Abbeville city -85.25130 31.56795  Henry County      24.33618 1990     6539        6867
      2:          1        124 Abbeville city -85.25130 31.56795  Henry County      24.33618 1991     6106        6648
      3:          1        124 Abbeville city -85.25130 31.56795  Henry County      24.33618 1992     6231        6762
      4:          1        124 Abbeville city -85.25130 31.56795  Henry County      24.33618 1993     5905        6553
      5:          1        124 Abbeville city -85.25130 31.56795  Henry County      24.33618 1994     5911        6395
     ---                                                                                                              
    141:          1       1396   Allgood town -86.51611 33.90762 Blount County      30.29652 2014    23023       24527
    142:          1       1396   Allgood town -86.51611 33.90762 Blount County      30.29652 2015    23163       24485
    143:          1       1396   Allgood town -86.51611 33.90762 Blount County      30.29652 2016    23298       24623
    144:          1       1396   Allgood town -86.51611 33.90762 Blount County      30.29652 2017    23726       24725
    145:          1       1396   Allgood town -86.51611 33.90762 Blount County      30.29652 2018       NA       25006
         Unemployment Level Unemployment Rate      density
      1:                328               4.8 7.859482e-05
      2:                542               8.2 7.963680e-05
      3:                531               7.9 7.896695e-05
      4:                648               9.9 7.894215e-05
      5:                484               7.6 7.871886e-05
     ---                                                  
    141:               1504               6.1 2.312020e-04
    142:               1322               5.4 2.308303e-04
    143:               1325               5.4 2.308303e-04
    144:                999               4.0 2.312020e-04
    145:                 NA           24128.0 2.312020e-04
    
     事前に機能:

    <前>ウィズウィズ
    ウィズウィズ ウィズウィズ
    subset

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ JSONコレクションデータを角度に取得する