2017-01-12 5 views
1

私はRの初心者です。あなたの中にはこれが簡単すぎるのであればごめんなさい。リストがあり、列の1つ(「値」)をドル形式に変換する必要があります。私はどんな助けにも感謝しています。ドル表示形式を再帰的に適用してドル形式を表示する

私はlapply()を成功させました。

ここに私のデータです:

dput(Input_File) 
structure(list(Zone = c("East", "East", "East", "East", "East", 
"East", "East", "West", "West", "West", "West", "West", "West", 
"West"), Fiscal.Year = c(2016, 2016, 2016, 2016, 2016, 2016, 
2017, 2016, 2016, 2016, 2017, 2017, 2018, 2018), Transaction.ID = c(132, 
133, 134, 135, 136, 137, 171, 171, 172, 173, 175, 176, 177, 178 
), L.Rev = c(30000, 20000, 23400, 23423, 2344, 452343, 23445, 
234, 45234, 23, 234345, 43534, 23421, 345345), L.Qty = c(234253, 
2342, 12334, 234253, 2342, 12334, 234253, 2342, 12334, 234234, 
223423, 234234, 43534, 432423), A.Rev = c(17253, 11117, 19751, 
10457, 11820, 14607, 14512, 16676, 12189, 11714, 12243, 18506, 
10500, 17793), A.Qty = c(19245, 17584, 18267, 19371, 19867, 13359, 
16932, 11541, 13434, 14409, 13908, 11042, 14632, 17332), I.Rev = c(17775, 
14452, 18459, 19481, 18463, 16566, 11749, 19208, 12244, 15344, 
15561, 16261, 11977, 11643), I.Qty = c(16441, 10409, 14249, 11737, 
11439, 11714, 18159, 18523, 17653, 14573, 16571, 13127, 12152, 
12692)), .Names = c("Zone", "Fiscal.Year", "Transaction.ID", 
"L.Rev", "L.Qty", "A.Rev", "A.Qty", "I.Rev", "I.Qty"), row.names = c(NA, 
14L), class = "data.frame") 

は、ここに私のコードです:

Output<-Input_File %>% 
gather(Rev_Qty,Value, L.Rev:I.Qty) %>% 
separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% 
split(.,list(.$Zone,.$Rev.Qty,.$Fiscal.Year),drop = TRUE) %>% 
lapply(.,function(x) {scales::dollar_format()(.[6])}) 

私は次のエラーを取得:

Error in UseMethod("round_any") : 
    no applicable method for 'round_any' applied to an object of class "list" 

予想される出力: 私は知りませんがどのように私はbecaをしたい出力を持つリストを作成する私は再帰的に)(dollar_formatを適用する方法を知っているが、ここで私が言うことができるものですしていない使用します。それぞれの欄「バリュー」で

Output<-Input_File %>% 
    gather(Rev_Qty,Value, L.Rev:I.Qty) %>% 
    separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% 
    split(.,list(.$Zone,.$Rev.Qty,.$Fiscal.Year),drop = TRUE) 

番号:それは、次のコードを実行した後、このようなことでしょうリストOutputの10個のデータフレームは、$フォーマットで表されます。出力は、10データフレームのリストでなければなりません。例えば、ここではリスト内の最初のデータフレームの第6列(値)は次のようになりますどのようにお見せするためのコードです:Outputリストの各データフレームで

a<-Output[[1]]$Value 
scales::dollar_format()(a) 

は、いつものように他の列が存在することになります。私はどんな助けにも感謝しています。ご不明な点がございましたらお知らせください。私たちは、匿名関数呼び出しを使用しているかどうかを確認してください

答えて

1

map

library(purrr) 
Input_File %>% 
     gather(Rev_Qty,Value, L.Rev:I.Qty) %>% 
     separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% 
     split(.,list(.$Zone,.$Rev.Qty,.$Fiscal.Year),drop = TRUE) %>% 
     map(~mutate(., Value = scales::dollar_format()(Value))) 
+0

purrrから)@watchtowerで匿名コールなしx[[6]]代わり.[6]

Input_File %>% gather(Rev_Qty,Value, L.Rev:I.Qty) %>% separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% split(.,list(.$Zone,.$Rev.Qty,.$Fiscal.Year),drop = TRUE) %>% lapply(.,function(x) {x[[6]] <- scales::dollar_format()(x[[6]]) x}) 

またはを使用編集 – akrun

+0

パーフェクト。本当にありがとう。 'lapply'の2行目に" x "の使用を説明してください。私はあなたの考えを感謝します。 – watchtower

+1

@watchtower匿名機能を使用することで、 'x'はリスト内のdata.frameです。 x [[6]]は6番目の列です。代入後にxの値を返す必要があります – akrun

関連する問題