【问题标题】:How to add values to a column and still keep some NA?如何向列添加值并仍然保留一些 NA?
【发布时间】:2020-07-24 13:50:15
【问题描述】:

我有一个包含三列的数据框:ID、年份、增长。最后一个包含每年以毫米为单位的增长数据。

例子:

df <- data.frame(ID=rep(c("CHC01", "CHC02", "CHC03"), each=6), 
         year=rep(2013:2018, 3), 
         growth=c(NA, NA, NA, 2.3, 2.1, 3.0, NA, NA, NA, NA, 1.1, 4.8, 1.0, 3.2, 4.2, 2.3, 2.1, 1.2))

在另一个数据框中,我还有其他三列:ID、missing_length、missing_years。缺失长度与测量中缺失的估计长度有关。缺失年数与 df

中的缺失年数有关
estimate <- data.frame(ID=c("CHC01", "CHC02", "CHC03"), 
               missing_length=c(1.0, 4.4, 0), 
               missing_years=c(1,3,0))

为了计算每个缺失年份的增长,我尝试了:

missing <- rep(estimate$missing_length / estimate$missing_years, estimate$missing_years)

需要注意的是,并非所有来自 df 的 NA 都会被估计值替换。

这是我试图获取的数据框的示例:

    ID   year growth
1  CHC01 2013     NA
2  CHC01 2014     NA
3  CHC01 2015   1.00
4  CHC01 2016   2.30
5  CHC01 2017   2.10
6  CHC01 2018   3.00
7  CHC02 2013     NA
8  CHC02 2014   1.47
9  CHC02 2015   1.47
10 CHC02 2016   1.47
11 CHC02 2017   1.10
12 CHC02 2018   4.80
13 CHC03 2013   1.00
14 CHC03 2014   3.20
15 CHC03 2015   4.20
16 CHC03 2016   2.30
17 CHC03 2017   2.10
18 CHC03 2018   1.20

有没有人知道如何处理这个问题?

非常感谢!

【问题讨论】:

  • 嗨 Isabela,欢迎来到 Stack Overflow,您想用来填写 df 的逻辑不清楚。请用文字和提供预期的输出来澄清。
  • @IanCampbell 刚刚在问题末尾添加了一个示例。感谢您的建议!
  • @akrun 我一直在尝试解决,我认为他们只需要匹配这些值的估计 df:structure(list(ID = structure(c(1L, 2L, 2L, 2L), .Label = c("CHC01", "CHC02", "CHC03"), class = "factor"), missing_length = c(1, 4.4, 4.4, 4.4), missing_years = c(1, 3, 3, 3)), row.names = c("1", "2", "2.1", "2.2"), class = "data.frame")

标签: r dataframe vector dplyr na


【解决方案1】:

我们可以使用which 来获取位置索引,然后使用tailreplace 中的missing_years 子集该位置,以在完成后用“missing_length”和“missing_years”的比率替换这些缺失值带有“估计”的left_join

library(dplyr)
df %>%
    left_join(estimate) %>%
    group_by(ID) %>% 
    transmute(year, growth = replace(growth, 
          tail(which(is.na(growth)), first(missing_years)), 
              first(missing_length)/first(missing_years)))
# A tibble: 18 x 3
# Groups:   ID [3]
#   ID     year growth
#   <fct> <int>  <dbl>
# 1 CHC01  2013  NA   
# 2 CHC01  2014  NA   
# 3 CHC01  2015   1   
# 4 CHC01  2016   2.3 
# 5 CHC01  2017   2.1 
# 6 CHC01  2018   3   
# 7 CHC02  2013  NA   
# 8 CHC02  2014   1.47
# 9 CHC02  2015   1.47
#10 CHC02  2016   1.47
#11 CHC02  2017   1.1 
#12 CHC02  2018   4.8 
#13 CHC03  2013   1   
#14 CHC03  2014   3.2 
#15 CHC03  2015   4.2 
#16 CHC03  2016   2.3 
#17 CHC03  2017   2.1 
#18 CHC03  2018   1.2 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多