我需要使用基于第一列中值的值填充空数据框(或者在这种情况下,行名称对我来说是相同的)。所以这里有三个对象:
set.seed=11
empty_df=data.frame(cities=c("New York","London","Rome","Vienna","Amsterdam"),
col.a=rep(NA,5),
col.b=rep(NA,5),
col.c=rep(NA,5))
values=rnorm(4,0,1)
to_fill=data.frame(cities=c("New York","London","Vienna","Amsterdam"),
col.a=values)
desired_output=data.frame(cities=c("New York","London","Rome","Vienna","Amsterdam"),
col.a=c(values[1],values[2],NA,values[3],values[4]),
col.b=rep(NA,5),
col.c=rep(NA,5))
第一列(可以转换为行名,使用行名称的解决方案或带有城市名称的第一列都很好)包括我想访问的一些城市和其他一些未指定的值。首先是df我想填充值,其输出是:
cities col.a col.b col.c
1 New York NA NA NA
2 London NA NA NA
3 Rome NA NA NA
4 Vienna NA NA NA
5 Amsterdam NA NA NA
第二个是我想要放入INTO空df的对象,你可以看到它缺少一行(带有“Rome”):
cities col1
1 New York 0.55213218
2 London 0.98907729
3 Vienna 1.11703741
4 Amsterdam -0.04616725
所以现在我想把它放在空的df中,留下NA
的行不匹配:
cities col.a col.b col.c
1 New York -0.62731870 NA NA
2 London -1.80206612 NA NA
3 Rome NA NA NA
4 Vienna -1.73446286 NA NA
5 Amsterdam -0.05709419 NA NA
我试图使用这样的最简单的合并解决方案:merge(empty_df,to_fill, by="cities")
:
cities col.a.x col.b col.c col.a.y
1 Amsterdam NA NA NA -0.05709419
2 London NA NA NA -1.80206612
3 New York NA NA NA -0.62731870
4 Vienna NA NA NA -1.73446286
当我尝试desired_output$col.a=merge(empty_df,to_fill, by="cities")
时发生错误(replacement has 4 rows, data has 5
)。是否有任何简单的解决方案可以放入for
循环或apply
?
答案 0 :(得分:1)
我们可以使用AND <nothing> NOT between 2900 AND 3199
:
match
我们empty_df$col.a <- to_fill$col.a[match(empty_df$cities, to_fill$cities)]
empty_df;
# cities col.a col.b col.c
#1 New York 1.5567564 NA NA
#2 London -0.6969401 NA NA
#3 Rome NA NA NA
#4 Vienna 1.3336636 NA NA
#5 Amsterdam 0.7329989 NA NA
col.a
empty_df
col.a
to_fill
来自match
cities
来自empty_df
cities
to_fill
.zip
1}}来自lambda_function.py
。