2017-08-14 3 views
0
library(tidyverse) 

これは単純な解決策があるように感じますが、私は固執しています。コードは以下と「のLoc」列内の2つのデータフレームの単純なリスト(これらは例を簡単にするために同じであるが、実際のデータが異なる値を有する)合計値が行内に隠れている場合のデータフレームリストのパーセント列を計算

Loc<-c("Montreal","Toronto","Vancouver","Quebec","Ottawa","Hamilton","Total") 
Count<-c("2344","2322","122","45","4544","44","9421") 

Data<-data_frame(Loc,Count) 
Data2<-data_frame(Loc,Count) 
Data3<-list(Data,Data2) 

各データフレームは、「合計」を有するが作成します「Count」列の対応する全体的な合計。 「Count」列の各値を「Count」列の最後の数値で割って各データフレームのパーセンテージを計算したいと思います。

各データフレームの新しい列としてパーセンテージを追加したいと思います。

この例では、合計は列内の最後の数値ですが、実際には列のどこにでも混合でき、「Loc」列の対応する「合計」値で見つけることができます。

私はpurrrとTidyverse使用したい:このソリューションは、ベースのみ-Rを使用しています

以下

はコードの例ですが、私は割合にこだわっている...

Data3%>%map(~mutate(.x,paste0(round(100* (MISSING PERCENTAGE),2),"%")) 

答えて

0

for (i in seq_along(Data3)) { 
    Data3[[i]]$Count <- as.numeric(Data3[[i]]$Count) 
    n <- nrow(Data3[[i]]) 
    Data3[[i]]$perc <- Data3[[i]]$Count/Data3[[i]]$Count[n] 
} 

> Data3 
[[1]] 
# A tibble: 7 x 3 
     Loc Count  perc 
     <chr> <dbl>  <dbl> 
1 Montreal 2344 0.248805859 
2 Toronto 2322 0.246470651 
3 Vancouver 122 0.012949793 
4 Quebec 45 0.004776563 
5 Ottawa 4544 0.482326717 
6 Hamilton 44 0.004670417 
7  Total 9421 1.000000000 

[[2]] 
# A tibble: 7 x 3 
     Loc Count  perc 
     <chr> <dbl>  <dbl> 
1 Montreal 2344 0.248805859 
2 Toronto 2322 0.246470651 
3 Vancouver 122 0.012949793 
4 Quebec 45 0.004776563 
5 Ottawa 4544 0.482326717 
6 Hamilton 44 0.004670417 
7  Total 9421 1.000000000 
+0

ありがとうございますが、forループを使用しない回答を提供できますか? (一連の機能を適用する)。パイプを使用するTidyverseソリューション(%>%)私はこの質問が実際には主にTidyverseの構文でパイプを使用するコードの大きな塊の一部であるため、突然forループに切り替えると私にフローを変更させるため、尋ねるだけです。うまくいけばあなたが助けることができますか? – Mike

+0

Tidyverseにはあまりよく知られていません...満足のいく回答を提供していない人がいれば数日後にそれを調べることができます – snoram

+0

問題ありません。 forループの代わりにlapply(または同様の関数群を適用する)を使って書き直すことができますか? – Mike

関連する問題