R 如何向现有数据框添加一组值?

R 如何向现有数据框添加一组值?,r,dataframe,vector,dplyr,R,Dataframe,Vector,Dplyr,我有一个包含三列的数据框:ID、year、growth。最后一个包含每年以毫米为单位的增长数据 例如: df <- data.frame(ID=rep(c("CHC01", "CHC02", "CHC03"), each=4), year=rep(2015:2018, 3), growth=c(NA, 2.3, 2.1, 3.0, NA, NA, NA, 3.2, NA, NA, 2.1, 1.2)) df我们可以进

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

例如:

df <- data.frame(ID=rep(c("CHC01", "CHC02", "CHC03"), each=4), 
                 year=rep(2015:2018, 3), 
                 growth=c(NA, 2.3, 2.1, 3.0, NA, NA, NA, 3.2, NA, NA, 2.1, 1.2))

df我们可以进行连接,然后用计算值替换
NA

library(dplyr)
df %>% 
   left_join(estimate) %>% 
   group_by(ID) %>% 
   transmute(year, growth  = replace(growth, is.na(growth), 
                 missing_length[1]/missing_years[1]))
# A tibble: 12 x 3
# Groups:   ID [3]
#   ID     year growth
#   <fct> <int>  <dbl>
# 1 CHC01  2015   1   
# 2 CHC01  2016   2.3 
# 3 CHC01  2017   2.1 
# 4 CHC01  2018   3   
# 5 CHC02  2015   1.47
# 6 CHC02  2016   1.47
# 7 CHC02  2017   1.47
# 8 CHC02  2018   3.2 
# 9 CHC03  2015   1.75
#10 CHC03  2016   1.75
#11 CHC03  2017   2.1 
#12 CHC03  2018   1.2 

数据表中的类似选项

library(data.table)
setDT(df)[estimate, growth := fcoalesce(growth, 
           missing_length/missing_years), on = .(ID)]

碱性溶液。假设表“df”和“estimate”是按id(升序CHC)排序的,并且我们保留您的“缺失”对象,那么这应该可以工作:

df$growth=replace(df$growth,which(is.na(df$growth)),missing)
输出:

      ID year   growth
1  CHC01 2015 1.000000
2  CHC01 2016 2.300000
3  CHC01 2017 2.100000
4  CHC01 2018 3.000000
5  CHC02 2015 1.466667
6  CHC02 2016 1.466667
7  CHC02 2017 1.466667
8  CHC02 2018 3.200000
9  CHC03 2015 1.750000
10 CHC03 2016 1.750000
11 CHC03 2017 2.100000
12 CHC03 2018 1.200000

谢谢你akrun,这很有帮助!当我运用你的建议时,我注意到了我在我的例子中忘记指出的一点(我将根据我的真实数据解释这一点,我认为这会更有意义):我所有的inviduals都是从1835年到2018年,但有些人比其他人年轻。对于年龄最大的个体,我不会有NA,因为它出生于1835年,一直存活到2018年。然而,例如,较年轻的个体在同一列上有30个NA。(我将在原始问题上添加一个示例)。你能帮我弄清楚怎么处理吗?我根据我的问题编辑了示例数据框。现在我们有了更接近我实际数据的东西。再次感谢!:)@伊莎贝拉姆,你能不能把它作为一个新问题发出来!如果我把这个问题编辑回第一个版本会更好吗?@IsabelaM你能不能也用预期的输出进行更新,以便我可以交叉检查。我尝试了你的新例子,但没有给出任何错误
library(data.table)
setDT(df)[estimate, growth := fcoalesce(growth, 
           missing_length/missing_years), on = .(ID)]
df$growth=replace(df$growth,which(is.na(df$growth)),missing)
      ID year   growth
1  CHC01 2015 1.000000
2  CHC01 2016 2.300000
3  CHC01 2017 2.100000
4  CHC01 2018 3.000000
5  CHC02 2015 1.466667
6  CHC02 2016 1.466667
7  CHC02 2017 1.466667
8  CHC02 2018 3.200000
9  CHC03 2015 1.750000
10 CHC03 2016 1.750000
11 CHC03 2017 2.100000
12 CHC03 2018 1.200000