R 如何向现有数据框添加一组值?
我有一个包含三列的数据框:ID、year、growth。最后一个包含每年以毫米为单位的增长数据 例如: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我们可以进
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