2016-11-05 5 views
3

purrr::map()を使用してNULL要素が存在するかどうかをテストし、それらを削除するデータフレーム内にリストがあります。再帰関数呼び出し用のpurrr :: mapを使用する

私はsapplyを使ってこれを行うことができましたが、マップは機能しませんでした。私はhttps://cran.r-project.org/web/packages/purrr/purrr.pdfを読むが、私は何が欠けているのか分からない。

はここでうまく機能 - この私のsapplyコードです:

P_Trans<- P_Trans[!sapply(P_Trans$Group,is.null),] 

ここのは、私がpurrr::mapのためにしようとしたいくつかのことですが、彼らは動作しません。ここで

は、私が試した4つのものがあります:

A)

P_Trans %>% purrr::map(.,~is.null(Group)) 

B)

P_Trans %>% purrr::map(.,~is.null(.$Group)) 

C)

P_Trans %>% purrr::map(~is.null(.$Group)) 

D)

P_Trans %>% purrr::map(~is.null(Group)) 

私の間違いを訂正して、私が上記の4つのオプションで間違っていることを教えてもらえますか?


データ:すべてのあなたのソリューションでは

dput(P_Trans) 

structure(list(TransactionID = c("a1", "a1", "a1", "a2", "a2", 
"a2", "a3", "a3", "a3", "a3", "a4", "a5", "a5", "a5", "a5", "a5", 
"a6", "a6", "a7"), ProductID = c("A", "B", "1", "C", "4", "5", 
"D", "C", "7", "8", "H", "1", "2", "3", "3", "1", "H", "15", 
"22"), ProductType = c(1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 2, 
2, 2, 2, 1, 2, 3), Group = list(structure(list(Group = "Group1"), .Names = "Group", row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = c("Group2", "Group3")), .Names = "Group", row.names = c(NA, 
-2L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group2"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group2"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group3"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = c("Group2", "Group3")), .Names = "Group", row.names = c(NA, 
-2L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group3"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group3"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group5"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group1"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group5"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
    Group = "Group5"), .Names = "Group", row.names = c(NA, -1L 
), class = c("tbl_df", "tbl", "data.frame")), NULL)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -19L), .Names = c("TransactionID", 
"ProductID", "ProductType", "Group")) 
+1

:あなたが欲しいものを得るために

その他の方法:

ソリューションのmap同等のmap_lglがあなたのsapplyやったようなlogicalのベクトルを返すように設計されているため@NateがコメントとしてP_Trans[!map_lgl(P_Trans$Group,is.null),]ですP_Trans [!map_lgl(P_Trans $ Group、is.null)、] '? – Nate

+0

@NathanDay - うわー!ありがとうございました。これはうまくいく。しかし、私の間違いについてコメントしていただけますか?私は妖精ですので、これは私が概念を学ぶのに役立ちます。私はあなたの考えを感謝します。 – watchtower

+1

私は 'data.frames'の' list'を持っているときに 'map'を使っています。通常はモデリングのために繰り返していきたいと思います。デフォルトで 'map'は' list'を返そうとしています。 'map-lgl'のようなラッパーを使うと' map(p_trans $ Group、is.null)%>と同様の 'なぜなら 'map'は時々私に合ったものを与え、' xapply'に戻る – Nate

答えて

0

  • あなたがP_Transのすべての列をループしている
  • これらの列はアトミックです(ないアイテム/列を介して)リスト(またはdata.frame)に名前がある場合、アトミックベクターには名前がありません。 names(P_Trans[[1]]) # NULL
  • あなたはリストではなく、データを返そうとしています。それは
  • 前にクラッシュしてもフレームは、
  • Cと同じBはD

と同じですa)のP_Trans %>% purrr::map(.,~is.null(Group))

  • Groupが存在しない、ここでは何も我々がすべきを教えてくれるん現在の項目でそれを探してください。さらに表の中で探してください。

b)P_Trans %>% purrr::map(.,~is.null(.$Group))

  • あなたはどれもそう$ operator is invalid for atomic vectors

lmapが列をごループを助けただろう、(でも第四1)いずれかを持っていない、4つの原子のベクトル、Groupという名前の要素を探して、各時間をループしています長さはP_Transの1つのサブリストであるが、アプローチもクラッシュしてしまい、最後のアイテムだけがGroupnames(P_Trans[4]) # "Group")というアイテムを持つことになる。 `

P_Trans %>% rowwise %>% filter(!is.null(Group)) 
P_Trans %>% filter(lengths(Group)!=0) 
P_Trans[lengths(P_Trans$Group)!=0,] 
関連する問題