-2

purrr を使用してリスト列を配置しようとしています。しかし、おもちゃの例を作成するだけで、私は完全に混乱します。

s <- tibble(b = as.integer(runif(
  n = 10, min = 0, max = 20
)))
s$e <-
  map(s$b,  ~ sample(seq(
    as.Date('1990/01/01'), as.Date('2010/01/01'), by = "day"
  ), size = .))

私はこのようなことができると思いました:

s2 <- s %>% map('b') %>% 
  mutate(e = map(~ sample(seq(as.Date('1990/01/01'),
                              as.Date('2010/01/01'), by = "day"),
                          size = .)))

ただし、これは機能しません。ここで何が欠けていますか?

ここで、listcolumn の日付を昇順に並べ替え、最初と最後の日付を抽出したいと思います。どうすればこれをゴロゴロすることができますか?さまざまなバリエーションを試しました

s %>% map('e') %>% map_df(~arrange(.))

しかし、明らかに私はここに何かが欠けています...

私の望む出力は、データフレームの新しい list-column であり、 list-columnの未配置sの日付がs$e新しい list-column で昇順で配置されますs$new_arranged_dates

> s
# A tibble: 10 × 3
       b           e       new_arranged_dates    
   <int>      <list>            <list>    
1     15 <date [15]>           <date [15]>
2      0  <date [0]>           <date [0]>
3      7  <date [7]>             etc
4      6  <date [6]>
5      3  <date [3]>
6     14 <date [14]>
7     15 <date [15]>
8     13 <date [13]>
9     13 <date [13]>
10    11 <date [11]>

編集 290817:

s2 <- s %>% 
  mutate(e = map(b,~ sample(seq(as.Date('1990/01/01'),
                              as.Date('2010/01/01'), by = "day"),
                          size = .))) %>% mutate(new_arranged_dates =map(e,~.[order(.)]))

私が欲しいものを手に入れます。ただし、理由はわかりません

s2 <- s %>% 
  mutate(e = map(b,~ sample(seq(as.Date('1990/01/01'),
                              as.Date('2010/01/01'), by = "day"),
                          size = .))) %>% mutate(new_arranged_dates=map(e,~arrange(.)))

結果は

Error in mutate_(.data, .dots = lazyeval::lazy_dots(...)) : 
  argument ".data" is missing, with no default
4

2 に答える 2

0

したがって、ここでの基本的なエラーは、arrange がデータフレームを優先し、ベクトルを注文しないことです。ループされたリストを data_frame に強制すると問題は解決しましたが、結果の強制された data_frame 列の名前も .

したがって、これは機能します:

  library(dplyr)
  s <- tibble(b = as.integer(runif(
       n = 10, min = 0, max = 20
       )))
  s <-
  s %>% mutate(e = map(b,  ~ sample(seq(
    as.Date('1990/01/01'), as.Date('2010/01/01'), by = "day"
  ), size = .)))

  s <- s2 %>% mutate(arranged = map(e,  ~ arrange(data_frame(.), .)))

ヒント: map から呼び出される browser() ステートメントを使用して新しい関数を作成すると、多くの助けになりました。おそらく他の人にも役立つでしょう。

于 2016-09-13T15:38:59.443 に答える