[英]R: Add 0s to dataframe
如何在下面的 dataframe 中添加 1990 年的太阳能源数量为 0? 1990 年的太阳能目前没有任何价值。
数据:
年 | 资源 | 数量 |
---|---|---|
1990 | 煤炭 | 19203 |
1990 | 核 | 2345 |
1991 | 煤炭 | 18490 |
1991 | 核 | 2398 |
1991 | 太阳的 | 123 |
1992 | ... | ... |
... | ... | ... |
2019 | ... | ... |
代码:
data <- read.csv('annual_generation.csv')
data$source <- as.factor(data$source)
这不起作用,但这是一般的想法:
for(i in 1990:2019) {
for (j in data$source) {
if (!data[i][j])
data[i][j] = 0
}
}
编辑:根据下面的答案,这是最终的解决方案:
data <- complete(data, YEAR, STATE, ENERGY.SOURCE,
fill = list(
GEN = 0,
TYPE.OF.PRODUCER = 'Total Electric Power Industry'))
YEAR STATE ENERGY.SOURCE TYPE.OF.PRODUCER GEN
<int><fct> <fct> <fct> <dbl>
1 1990 IL Coal Total Electric Power Industry 54966018
...
我们可以使用complete
的tidyr
library(tidyr)
complete(data, year, source, fill = list(amount = 0))
-输出
# A tibble: 6 x 3
# year source amount
# <int> <chr> <dbl>
#1 1990 coal 19203
#2 1990 nuclear 2345
#3 1990 solar 0
#4 1991 coal 18490
#5 1991 nuclear 2398
#6 1991 solar 123
另外,如果有一些“年份”,则丢失。 我们可以使用一个范围
complete(data, year = 1990:2019, source, fill = list(amount = 0))
data <- structure(list(year = c(1990L, 1990L, 1991L, 1991L, 1991L),
source = c("coal",
"nuclear", "coal", "nuclear", "solar"), amount = c(19203L, 2345L,
18490L, 2398L, 123L)), class = "data.frame", row.names = c(NA,
-5L))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.