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