1

リスト列にある各ベクトルの最初の 5 つの値を取得し、リストとして保存されたデータ フレームの新しい列として返したいと思います。

structure(list(sample_num = 1:6, vector = list(c(0, 1, 1, 0, 
1, 2, 0, 0, 3, 0), c(0, 0, 1, 2, 0, 0, 4, 10, 12, 1), c(1, 33, 
4, 4, 2, 2, 6, 9, 14, 2), c(0, 0, 1, 0, 1, 0, 1, 5, 3, 0), c(0, 
1, 1, 0, 0, 0, 1, 4, 3, 0), c(0, 0, 1, 0, 0, 0, 1, 1, 1, 0))), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num", 
"vector"))

> test
# A tibble: 6 × 2
  sample_num     vector
       <int>     <list>
1          1 <dbl [10]>
2          2 <dbl [10]>
3          3 <dbl [10]>
4          4 <dbl [10]>
5          5 <dbl [10]>
6          6 <dbl [10]>

lmap を使用しようとしましたが、エラー メッセージが表示されました

> test  %>% lmap(.$vector,.f = function(x) x[1:5])
Error in .f(.x[i], ...) : 
  unused argument (list(c(0, 1, 1, 0, 1, 2, 0, 0, 3, 0), c(0, 0, 1, 2, 0, 0, 4, 10, 12, 1), c(1, 33, 4, 4, 2, 2, 6, 9, 14, 2), c(0, 0, 1, 0, 1, 0, 1, 5, 3, 0), c(0, 1, 1, 0, 0, 0, 1, 4, 3, 0), c(0, 0, 1, 0, 0, 0, 1, 1, 1, 0)))

ありがとうございました!

4

2 に答える 2

4

これはあなたがやろうとしていることですか?

structure(list(sample_num = 1:6, vector = list(c(0, 1, 1, 0, 
1, 2, 0, 0, 3, 0), c(0, 0, 1, 2, 0, 0, 4, 10, 12, 1), c(1, 33, 
4, 4, 2, 2, 6, 9, 14, 2), c(0, 0, 1, 0, 1, 0, 1, 5, 3, 0), c(0, 
1, 1, 0, 0, 0, 1, 4, 3, 0), c(0, 0, 1, 0, 0, 0, 1, 1, 1, 0))), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num", 
"vector"))

test$new = lapply(test$vector, function(x) {x[1:5]})
test

# A tibble: 6 × 3
  sample_num     vector       new
       <int>     <list>    <list>
1          1 <dbl [10]> <dbl [5]>
2          2 <dbl [10]> <dbl [5]>
3          3 <dbl [10]> <dbl [5]>
4          4 <dbl [10]> <dbl [5]>
5          5 <dbl [10]> <dbl [5]>
6          6 <dbl [10]> <dbl [5]>


test$vector[3]
[[1]]
 [1]  1 33  4  4  2  2  6  9 14  2

test$new[3]
[[1]]
[1]  1 33  4  4  2

dplyr 構文を使用する場合は、最初に関数を定義します。

f = function(x) {
    return(list(x[1:5]))
    }

次に、行ごとに列に適用しますvector

test = test %>%
    rowwise() %>%
    mutate(new_dplyr = f(vector))

test
# A tibble: 6 × 3
  sample_num     vector new_dplyr
       <int>     <list>    <list>
1          1 <dbl [10]> <dbl [5]>
2          2 <dbl [10]> <dbl [5]>
3          3 <dbl [10]> <dbl [5]>
4          4 <dbl [10]> <dbl [5]>
5          5 <dbl [10]> <dbl [5]>
6          6 <dbl [10]> <dbl [5]>

test$vector[3]
[[1]]
 [1]  1 33  4  4  2  2  6  9 14  2

test$new_dplyr[3]
[[1]]
[1]  1 33  4  4  2
于 2016-10-19T18:14:58.497 に答える
2

これは、呼び出しのコンパクトなシーケンスを使用します。最初に、lapply または sapply の使用法と同じように '[' を使用してみましたが、成功させるにはバッククォートが必要でした。

> test$new <- map(test$vector,.f = `[`,  1:5)
> test
# A tibble: 6 × 3
  sample_num     vector       new
       <int>     <list>    <list>
1          1 <dbl [10]> <dbl [5]>
2          2 <dbl [10]> <dbl [5]>
3          3 <dbl [10]> <dbl [5]>
4          4 <dbl [10]> <dbl [5]>
5          5 <dbl [10]> <dbl [5]>
6          6 <dbl [10]> <dbl [5]>
于 2016-10-19T18:38:14.683 に答える