2016-04-23 2 views
1

に(dplyrのTBL-オブジェクトの)列の変換:次のように私は<code>data.frame</code>を持っているTBL-ヘッダ

 types  long_name 
    (chr)   (chr) 
1 neighborhood Upper East Side 
2 sublocality Manhattan 
3 postal_code 10021 

私は次のようにそれを変換したい:

 neighborhood sublocality postal_code 
    (chr)   (chr)   (chr) 
1 Upper East Side Manhattan  10021 

ばなりませんこれを行うためのすばやく簡単な方法です。

編集者注:これはないRのデータフレームとして、表示されますが、DPLY TBL-オブジェクトとしてされています

dput(as.tbl(dfrm)) 
structure(list(types = c("neighborhood", "sublocality", "postal_code" 
), long_name = c("Upper East Side", "Manhattan", "10021")), .Names = c("types", 
"long_name"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L)) 
+0

dplyr-'tbl'はnoobsが実際のRデータフレームのために誤っているという意味で新しい 'data.table'と思われます。私は、より知識豊かなuseRsがオブジェクトクラスの意識をいくらか明確に保つ必要があると思います。 –

+0

@ 42-私の謝罪は、次回より慎重になります – Armin

答えて

2

を使用することができ、我々は使用することができますtidyr::spreadを長から幅に移動:

library(tidyr) 

df %>% spread(types, long_name) 
# Source: local data frame [1 x 3] 
# 
#  neighborhood postal_code sublocality 
#    (chr)  (chr)  (chr) 
# 1 Upper East Side  10021 Manhattan 
+1

ああ、確かに誰もがあなたを見せてください;)@Armin - 私はおそらくこの1つを確認するでしょう。それはあなたが取り組んでいるものと一線を画しています。 –

+0

@RichardScrivenはあなたのお手伝いをどうもありがとうございます – Armin

2

設定しtypeslong_nameベクトル上の名前として、それにas.data.frame.list()を実行します。 dfと仮定すると...

as.data.frame.list(
    with(df, setNames(long_name, types)), 
    stringsAsFactors = FALSE 
) 
#  neighborhood sublocality postal_code 
# 1 Upper East Side Manhattan  10021 

あるいは、同じもの少し異なる方法...

as.data.frame(
    with(df, setNames(as.list(long_name), types)), 
    stringsAsFactors = FALSE 
) 

あなたのデータフレームであり、あなたが数値郵便番号が必要な場合は、その列にas.numeric()を実行します。また、dplyrを使用しているため、これをtbl_df()にラップして正確な結果を得ることができます。それとも、

df %>% 
    do(
     as.data.frame.list(
      setNames(.$long_name, .$types), 
      stringsAsFactors = FALSE 
     ) 
    ) %>% 
    tbl_df 
# Source: local data frame [1 x 3] 
# 
#  neighborhood sublocality postal_code 
#    (chr)  (chr)  (chr) 
# 1 Upper East Side Manhattan  10021 

データのようなものでdplyrでそれをすべて行うことができます:

df <- structure(list(types = c("neighborhood", "sublocality", "postal_code" 
), long_name = c("Upper East Side", "Manhattan", "10021")), .Names = c("types", 
"long_name"), row.names = c(NA, -3L), class = c("tbl_df", "tbl", 
"data.frame")) 
+0

私はdplyr 'tbl'に見えました。 –

+0

それを入手しました@ 42- –

2

我々はHadleyverseに固執transpose

library(data.table) 
setNames(transpose(df[-1]), df$types) 
#  neighborhood sublocality postal_code 
#1 Upper East Side Manhattan  10021