2

複雑なデータ フレームがあり、最小限の例は次のとおりです。

df <- structure(list(District = c("Adilabad", "Adilabad", "Adilabad", 
                        "Adilabad", "Adilabad", "Adilabad", "Adilabad", "Adilabad", "Adilabad", 
                        "Adilabad"), Subdistt = c("Adilabad", "Adilabad", "Adilabad", 
                        "Tamsi", "Tamsi", "Tamsi", "Tamsi", "Tamsi", "Tamsi", "Tamsi"
                        ), TRU = c("Total", "Rural", "Urban", "Total", "Rural", "Urban", 
                        "Rural", "Rural", "Urban", "Urban"), Level = c("District", "District", 
                        "District", "Sub-District", "Sub-District", "Sub-District", "Village", 
                        "Village", "Town", "Town"), No_HH = c(1277, 364, 913, 
                        1277, 364, 913, 117, 247, 614, 299)), .Names = c("District", 
                        "Subdistt", "TRU", "Level", "No_HH"), row.names = c(NA, 10L), class = "data.frame")

次のようになります。

   District Subdistt   TRU        Level No_HH
1  Adilabad Adilabad Total     District  1277
2  Adilabad Adilabad Rural     District   364
3  Adilabad Adilabad Urban     District   913
4  Adilabad    Tamsi Total Sub-District  1277
5  Adilabad    Tamsi Rural Sub-District   364
6  Adilabad    Tamsi Urban Sub-District   913
7  Adilabad    Tamsi Rural      Village   117
8  Adilabad    Tamsi Rural      Village   247
9  Adilabad    Tamsi Urban         Town   614
10 Adilabad    Tamsi Urban         Town   299

ある意味で後続の各列は、前の列の一種のサブセットです。地方、都市、および総レベルでの準地区と地区の合計かどうかを検証する必要があります。

例: 行 7 と行 8 の合計は、行 5 の値に等しくなります。行 5 は地方のサブ地区です。df を拡張すると、多くの地方のサブ地区があります。行 2 の農村地区には、すべての農村地区の合計が表示されます。

最小限の期待される出力は次のようになります。

  District Subdistt   TRU        Level No_HH
1 Adilabad    Tamsi Rural Sub-District   364
2 Adilabad    Tamsi Urban Sub-District   913

364 は上記の最小の例で与えられた 117 + 247 の合計であり、913 は最小の例で与えられた行 614 + 299 の合計の合計です。

現在、特定の値にサブセット化できますが、これらの複雑な選択に基づいて合計する方法がわかりません。誰か助けてくれませんか?

4

1 に答える 1

1

我々は試すことができます

library(dplyr)
df %>%
    filter(Level=='Sub-District' & TRU != 'Total')
#  District Subdistt   TRU        Level No_HH
#1 Adilabad    Tamsi Rural Sub-District   364
#2 Adilabad    Tamsi Urban Sub-District   913

summing で同じ出力を得る必要がある場合は、

df %>%
    filter(!grepl('District', Level)) %>% 
    group_by(District, Subdistt,TRU) %>%
    summarise(No_HH= sum(No_HH)) %>%
    mutate(Level= 'Sub_District')
#  District Subdistt   TRU No_HH        Level
#     (chr)    (chr) (chr) (dbl)        (chr)
# 1 Adilabad    Tamsi Rural   364 Sub_District
# 2 Adilabad    Tamsi Urban   913 Sub_District
于 2015-12-13T08:15:13.307 に答える