【问题标题】:R: Add 0s to dataframeR:向数据框添加 0
【发布时间】:2021-02-14 19:08:57
【问题描述】:

如何将 1990 年的太阳能源数量添加到下面的数据框中? 1990 年的太阳能目前没有任何价值。

数据:

year source amount
1990 coal 19203
1990 nuclear 2345
1991 coal 18490
1991 nuclear 2398
1991 solar 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
  ...

【问题讨论】:

    标签: r dataframe for-loop


    【解决方案1】:

    我们可以从tidyr使用complete

    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))
    

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 2018-02-09
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多