“a”中变量的条件替换;树形结构“;R中的数据帧

“a”中变量的条件替换;树形结构“;R中的数据帧,r,dataframe,conditional-formatting,R,Dataframe,Conditional Formatting,我有一些关于不同政府级别在n年时间内的收入数据。政府有两级,第一级和第二级。二级是我建立数据后需要进行分析的级别,这意味着最终样本将只包括二级区域政府。二级政府“属于”相应的一级政府:例如,DE1是一级政府,DE1x是DE1保护伞下的二级次区域政府。此模式在数据集中是一致的(例如,CZ1x属于CZ1,IT3x属于IT3等等)。可以将数据视为具有树结构。国家代码也可用,由政府级别的前两个字母给出。数据如下所示: data <- as.data.frame(cbind(c("DE1&

我有一些关于不同政府级别在n年时间内的收入数据。政府有两级,第一级和第二级。二级是我建立数据后需要进行分析的级别,这意味着最终样本将只包括二级区域政府。二级政府“属于”相应的一级政府:例如,DE1是一级政府,DE1x是DE1保护伞下的二级次区域政府。此模式在数据集中是一致的(例如,CZ1x属于CZ1,IT3x属于IT3等等)。可以将数据视为具有树结构。国家代码也可用,由政府级别的前两个字母给出。数据如下所示:

data <- as.data.frame(cbind(c("DE1", "DE1", "DE1", "DE11", "DE11", "DE11", "DE12", "DE12", "DE12", "DE2",
            "DE2","DE2", "DE21","DE21","DE21","DE22","DE22","DE22","DE23","DE23","DE23",
            "CZ0", "CZ0","CZ0", "CZ01", "CZ01","CZ01", "CZ02", "CZ02","CZ02") , 
            c(rep("DE",21), rep("CZ",9)),
            c("1", "1", "1", "2", "2", "2", "2", "2", "2", "1",
              "1","1", "2","2","2","2","2","2","2","2","2",
              "1", "1","1", "2", "2","2", "2", "2","2"),
          c("2000", "2001", "2002", "2000", "2001", "2002","2000", "2001", "2002",
            "2000", "2001", "2002","2000", "2001", "2002","2000", "2001", "2002",
            "2000", "2001", "2002", "2000", "2001", "2002", "2000", "2001", "2002",
            "2000", "2001", "2002"),
            c( runif(n = 3, min = 1300, max = 21220), "NA","NA", 16000, 
          runif(n=12, min = 1300, max = 21220), "NA", 18000,"NA", runif(n=6, min = 1300, max = 21220),
          "NA","NA","NA")))

colnames(data) <- c("Region", "Country", "Gvt Lvl","Time", "Revenue")

data
Region Country Gvt Lvl Time          Revenue
DE1       DE       1   2000 16858.6538477242
DE1       DE       1   2001  7788.3873622492
DE1       DE       1   2002 19988.1219627894
DE11      DE       2   2000               NA
DE11      DE       2   2001               NA
DE11      DE       2   2002            16000
DE12      DE       2   2000 6660.73037594557
DE12      DE       2   2001 9005.15880053863
DE12      DE       2   2002 2322.38461054862
DE2       DE       1   2000 16887.0197726786
DE2       DE       1   2001 11184.8074057698
DE2       DE       1   2002 1442.17075794935
DE21      DE       2   2000 6902.39389214665
DE21      DE       2   2001 6562.93060332537
DE21      DE       2   2002 17302.4776424281
DE22      DE       2   2000 16508.5772226751
DE22      DE       2   2001 2753.07780653238
DE22      DE       2   2002 2198.10680534691
DE23      DE       2   2000               NA
DE23      DE       2   2001            18000
DE23      DE       2   2002               NA
CZ0       CZ       1   2000 8614.85693316907
CZ0       CZ       1   2001 9601.59771829844
CZ0       CZ       1   2002 7134.94570834562
CZ01      CZ       2   2000 8562.89313737303
CZ01      CZ       2   2001 10880.8537839726
CZ01      CZ       2   2002  6957.3313607648
CZ02      CZ       2   2000               NA
CZ02      CZ       2   2001               NA
CZ02      CZ       2   2002               NA

数据从
区域
提取公共部分后,您可以使用
填充
来填充缺失的值:

library(dplyr)

data %>%
  mutate(Revenue = as.numeric(na_if(Revenue, "NA"))) %>%
  group_by(group = substr(Region, 1, 3), Time) %>%
  mutate(Revenue = replace(Revenue, is.na(Revenue),Revenue[Region == group])) %>%
  ungroup

# A tibble: 30 x 6
#   Region Country `Gvt Lvl` Time  Revenue group
#   <chr>  <chr>   <chr>     <chr>   <dbl> <chr>
# 1 DE1    DE      1         2000   13259. DE1  
# 2 DE1    DE      1         2001   16229. DE1  
# 3 DE1    DE      1         2002   19929. DE1  
# 4 DE11   DE      2         2000   13259. DE1  
# 5 DE11   DE      2         2001   16229. DE1  
# 6 DE11   DE      2         2002   16000  DE1  
# 7 DE12   DE      2         2000    2793. DE1  
# 8 DE12   DE      2         2001    3491. DE1  
# 9 DE12   DE      2         2002   14854. DE1  
#10 DE2    DE      1         2000    3976. DE2  
# … with 20 more rows
库(dplyr)
数据%>%
变异(收入=如数字(如果收入为“na”),则不适用)%>%
分组依据(分组=substr(区域,1,3),时间)%>%
变异(收入=替换(收入,is.na(收入),收入[地区==集团])%>%
解组
#一个tibble:30x6
#地区国家“Gvt Lvl”时间收入组
#                 
#2000年11月1日第1段13259。德1
#2001年11月2日16229。德1
#2002年11月3日1992。德1
#2000年12月4日。德1
#2001年12月5日第16229页。德1
#2002年11月6日第2季度16000日第1季度
#7 DE12 DE 2 2000 2793。德1
#8 DE12 DE 2 2001 3491。德1
#2002年12月2日9日14854。德1
#10 DE2 DE 1 2000 3976。德2
#…还有20行

区域提取公共零件后,可以使用
填充
来填充缺少的值:

library(dplyr)

data %>%
  mutate(Revenue = as.numeric(na_if(Revenue, "NA"))) %>%
  group_by(group = substr(Region, 1, 3), Time) %>%
  mutate(Revenue = replace(Revenue, is.na(Revenue),Revenue[Region == group])) %>%
  ungroup

# A tibble: 30 x 6
#   Region Country `Gvt Lvl` Time  Revenue group
#   <chr>  <chr>   <chr>     <chr>   <dbl> <chr>
# 1 DE1    DE      1         2000   13259. DE1  
# 2 DE1    DE      1         2001   16229. DE1  
# 3 DE1    DE      1         2002   19929. DE1  
# 4 DE11   DE      2         2000   13259. DE1  
# 5 DE11   DE      2         2001   16229. DE1  
# 6 DE11   DE      2         2002   16000  DE1  
# 7 DE12   DE      2         2000    2793. DE1  
# 8 DE12   DE      2         2001    3491. DE1  
# 9 DE12   DE      2         2002   14854. DE1  
#10 DE2    DE      1         2000    3976. DE2  
# … with 20 more rows
库(dplyr)
数据%>%
变异(收入=如数字(如果收入为“na”),则不适用)%>%
分组依据(分组=substr(区域,1,3),时间)%>%
变异(收入=替换(收入,is.na(收入),收入[地区==集团])%>%
解组
#一个tibble:30x6
#地区国家“Gvt Lvl”时间收入组
#                 
#2000年11月1日第1段13259。德1
#2001年11月2日16229。德1
#2002年11月3日1992。德1
#2000年12月4日。德1
#2001年12月5日第16229页。德1
#2002年11月6日第2季度16000日第1季度
#7 DE12 DE 2 2000 2793。德1
#8 DE12 DE 2 2001 3491。德1
#2002年12月2日9日14854。德1
#10 DE2 DE 1 2000 3976。德2
#…还有20行
库(data.table)
#>警告:包“data.table”是在R版本4.0.4下生成的
种子(42)
数据1:DE1 DE1 2000 19522.9363864474 DE1
#>2:2001年11月1日19966.5422328934日
#>3:DE1 DE 1 2002 6999.89953294396 DE1
#>4:DE11 DE 2 2000 DE1
#>5:2001年第2季度第11季度第1季度
#>6:2002年12月11日16000日
#>7:DE12 DE 2 2000 17842.5167112611 DE1
#>8:DE12 DE 2 2001 14083.5707363486 DE1
#>9:DE12 DE 2 2002 11640.3913066722 DE1
#>10:DE2 DE 1 2000 15972.839227654 DE2
#>11:DE2 DE 1 2001 3982.55861697719 DE2
#>12:DE2 DE 1 2002 14387.2864248045 DE2
#>13:DE21 DE 2 2000 15344.890498016 DE2
#>14:DE21 DE 2 2001 10418.2161828689 DE2
#>15:DE21 DE 2 2002 15624.7160529159 DE2
#>16:DE22 DE 2 2000 19918.6711632833 DE2
#>17:DE22 DE 2 2001 6388.14218087122 DE2
#>18:DE22 DE 2 2002 10508.8730250672 DE2
#>19:DE23 DE 2 2000 DE2
#>20:DE23 DE2 2001 18000 DE2
#>21:DE23 DE 2 2002 DE2
#>22:CZ0 CZ 1 2000 20025.0892932899 CZ0
#>23:CZ0 CZ 1 2001 20786.2704534456 CZ0
#>24:CZ0 CZ 1 2002 3640.34824416041 CZ0
#>25:CZ01 CZ 2 2000 10761.9418646954 CZ0
#>26:CZ01 CZ 2 2001 12461.8283051997 CZ0
#>27:CZ01 CZ 2 2002 19308.3052349649 CZ0
#>28:CZ02 CZ 2 2000 CZ0
#>29:CZ02 CZ 2 2001 CZ0
#>30:CZ02 CZ 2 2002 CZ0
#>地区国家/地区Gvt等级时间收入水平1
数据[数据[`Gvt Lvl`==1],收入:=fcoalesce(收入,即收入),on=(1级,时间)][]
#>地区国家/地区Gvt等级时间收入水平1
#>1:DE1 DE1 2000 19522.9363864474 DE1
#>2:2001年11月1日19966.5422328934日
#>3:DE1 DE 1 2002 6999.89953294396 DE1
#>4:DE11 DE 2 2000 19522.9363864474 DE1
#>5:DE11 DE 2 2001 19966.5422328934 DE1
#>6:2002年12月11日16000日
#>7:DE12 DE 2 2000 17842.5167112611 DE1
#>8:DE12 DE 2 2001 14083.5707363486 DE1
#>9:DE12 DE 2 2002 11640.3913066722 DE1
#>10:DE2 DE 1 2000 15972.839227654 DE2
#>11:DE2 DE 1 2001 3982.55861697719 DE2
#>12:DE2 DE 1 2002 14387.2864248045 DE2
#>13:DE21 DE 2 2000 15344.890498016 DE2
#>14:DE21 DE 2 2001 10418.2161828689 DE2
#>15:DE21 DE 2 2002 15624.7160529159 DE2
#>16:DE22 DE 2 2000 19918.6711632833 DE2
#>17:DE22 DE 2 2001 6388.14218087122 DE2
#>18:DE22 DE 2 2002 10508.8730250672 DE2
#>19:DE23 DE 2 2000 15972.839227654 DE2
#>20:DE23 DE 2 2001 18