将值从一个数据帧传输到另一个数据帧 [英] Transfer values from one dataframe to another

查看:126
本文介绍了将值从一个数据帧传输到另一个数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个数据帧。第一个如下所示:

  value<  -  seq(1,100,length.out = 20)
df1< - data.frame(id = as.character(1:20),
value = value,
stringsAsFactors = F)

我有一个第二个数据框看起来像这样

  df2< -  data.frame(id = as.character(c(1:5,21:23)),
v2 = NA,
stringsAsFactors = F)

我需要从 df1 转移到 df2 ,但仅在 df1 $ id == df2 $ id 之间。所以我需要的数据框是:

  df2Needed<  -  data.frame(id = as.character(c(1:5 ,21:23)),
v2 = c(value [1:5],NA,NA,NA),
stringsAsFactors = F)
pre>

有没有办法这样做?

解决方案

使用 data.table

  require(data.table)
dt1 < - data.table(df1,key =id)
dt2 < - data.table(df2)

dt1 [dt2 $ id,value]

#id值
#1:1 1.000000
#2:2 6.210526
#3:3 11.421053
#4:4 16.631579
#5 :5 21.842105
#6:21 NA
#7:22 NA
#8:23 NA

或使用base merge as @TheodoreLytras在评论中提到:

 #你不需要在df2 
合并中有`v2`列(df2,df1,by =id,all.x = T,sort = F)

#id v2 value
#1 1 NA 1.000000
#2 2 NA 6.210526
#3 3 NA 11.421053
#4 4不适用16.631579
#5 5 NA 21.842105
#6 21 NA NA
#7 22 NA NA
#8 23 NA NA


I have two data frames. The first looks like this:

value <- seq(1, 100, length.out=20)
df1 <- data.frame(id=as.character(1:20), 
                  value=value, 
                  stringsAsFactors=F)

I have a second dataframe that looks like this

df2 <- data.frame(id=as.character(c(1:5, 21:23)),
                  v2=NA, 
                  stringsAsFactors=F)

I need the values transferring from df1 to df2, but only where df1$id == df2$id. So the dataframe I need is:

df2Needed <- data.frame(id=as.character(c(1:5, 21:23)),
                      v2=c(value[1:5], NA, NA, NA),
                      stringsAsFactors=F)

Is there a way to do this?

解决方案

Using data.table:

require(data.table)
dt1 <- data.table(df1, key="id")
dt2 <- data.table(df2)

dt1[dt2$id, value]

#    id     value
# 1:  1  1.000000
# 2:  2  6.210526
# 3:  3 11.421053
# 4:  4 16.631579
# 5:  5 21.842105
# 6: 21        NA
# 7: 22        NA
# 8: 23        NA

or using base merge as @TheodoreLytras mentioned under comment:

# you don't need to have `v2` column in df2
merge(df2, df1, by="id", all.x=T, sort=F)

#   id v2     value
# 1  1 NA  1.000000
# 2  2 NA  6.210526
# 3  3 NA 11.421053
# 4  4 NA 16.631579
# 5  5 NA 21.842105
# 6 21 NA        NA
# 7 22 NA        NA
# 8 23 NA        NA

这篇关于将值从一个数据帧传输到另一个数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆