2017-12-17 5 views
1

私は、異なる場所に温度を記録するデータフレームと、温度データが観測された日付を記録する別のデータフレームを持っています。例えばRの別のデータフレームからの順序に基づいてデータフレームを配置する方法は?

temperature <- read.table(header=TRUE, text=' 
       NewYork Boston Madison 
        32  22 7 
        27  13 28 
        15  0 5 ') 


date <- read.table(header=TRUE, text=' 
     NewYork   Boston  Madison 
     2013-08-09  2002-04-01 2003-08-09 
     2004-07-11  2003-09-12 2002-12-23 
     2006-08-05  2005-11-09 2005-02-05 ') 

私は温度データの順序を取得するには、「適用」機能を使用するが、どのように私は私が得るために基づいて私の日付データを手配することができます。

apply(temperature, 2, order) 

答えて

0

あなたは、行の位置情報を維持し、長いフォームにあなたのデータフレームを再形成するために行インデックスを追加する場合は、あなたがそれらを結合することができます。 tidyr::gatherdplyr::inner_join

library(tidyverse) 

temperature <- read_table(
'NewYork Boston Madison 
     32  22   7 
     27  13  28 
     15  0   5') 

date <- read_table(
    'NewYork   Boston  Madison 
2013-08-09  2002-04-01 2003-08-09 
2004-07-11  2003-09-12 2002-12-23 
2006-08-05  2005-11-09 2005-02-05') 

temp_date <- inner_join(
    date %>% rowid_to_column('i') %>% gather(city, date, -i), 
    temperature %>% rowid_to_column('i') %>% gather(city, temp, -i) 
) 
#> Joining, by = c("i", "city") 

temp_date 
#> # A tibble: 9 x 4 
#>  i city  date temp 
#> <int> <chr>  <date> <int> 
#> 1  1 NewYork 2013-08-09 32 
#> 2  2 NewYork 2004-07-11 27 
#> 3  3 NewYork 2006-08-05 15 
#> 4  1 Boston 2002-04-01 22 
#> 5  2 Boston 2003-09-12 13 
#> 6  3 Boston 2005-11-09  0 
#> 7  1 Madison 2003-08-09  7 
#> 8  2 Madison 2002-12-23 28 
#> 9  3 Madison 2005-02-05  5 
0

とここにその都市のための記録の日付で各都市の観察結果と一致するreshape2を使用してアプローチがあります。結果は、温度値に加えて都市名と日付の列を持つ9行のデータです。

temperature <- read.table(header = TRUE, text = ' 
       NewYork Boston Madison 
          32  22 7 
          27  13 28 
          15  0 5 ') 

date <- read.table(header = TRUE, text = ' 
        NewYork   Boston  Madison 
        2013-08-09  2002-04-01 2003-08-09 
        2004-07-11  2003-09-12 2002-12-23 
        2006-08-05  2005-11-09 2005-02-05 ') 

library(reshape2) 

meltTemp <- melt(temperature) 
meltTemp$date <- melt(date,measure.vars=c("NewYork","Boston","Madison"))[,"value"] 
meltTemp 

...と出力します。

> meltTemp 
    variable value  date 
1 NewYork 32 2013-08-09 
2 NewYork 27 2004-07-11 
3 NewYork 15 2006-08-05 
4 Boston 22 2002-04-01 
5 Boston 13 2003-09-12 
6 Boston  0 2005-11-09 
7 Madison  7 2003-08-09 
8 Madison 28 2002-12-23 
9 Madison  5 2005-02-05 
> 
1

私たちは、別のデータセットにorderから1つのデータセットの対応する列を注文する

date[] <- Map(function(x, y) x[order(y)], date, temperature) 
+1

感謝をMapを使用することができます。これはまさに私が探しているものです。 –

関連する問題