【问题标题】:How to filter a data frame from another data frame while also adding a column from the second data frame in R [duplicate]如何从另一个数据帧中过滤一个数据帧,同时从 R 中的第二个数据帧添加一列 [重复]
【发布时间】:2018-08-14 05:42:31
【问题描述】:

我想知道执行一个简单函数的最简单方法,其目的是:

  1. 我想使用来自第二个数据帧的 ID* 过滤第一个数据帧。
  2. 我还想在第二列的过滤数据中添加一个新列,该列对应于它所链接的 ID*。

我提供了一个示例代码,其中 maindata 是主要数据,来自 subdata 的 Age* 必须添加到 maindata,同时仅过滤子数据中存在的 IDs* 以获得数据框带有 ID、姓名和年龄。这个最终的数据框被命名为finaldata

示例代码:

library(dplyr)
maindata = data.frame(ID=c(1:10), Name=c("a","b","c","d","e","f","g","h","i","j"))
subdata = data.frame(ID=c(1,3,6,2,7), Age=c(26,34,33,55,21))
#This is what I would like to have
finaldata = data.frame(ID=c(1,3,6,2,7), Name=c("a","c","f","b","7"), Age=c(26,34,33,55,21))

# I've tried using dplyr with no luck, This must be very basic :(
finaldata = maindata %>%
              filter(ID %in% subdata$ID) %>%
              mutate(Age=subdata$Age)

*示例中的标题名称

【问题讨论】:

  • subdata$Name <- maindata$Name[match(subdata$ID, maindata$ID)]
  • merge(maindata, subdata, by="ID", all.y=TRUE)

标签: r dataframe join dplyr


【解决方案1】:

可以基于ID在两个数据集之间做inner_join

library(dplyr)
inner_join(maindata, subdata)

Joining, by = "ID"
   ID Name Age
1  1    a  26
2  2    b  55
3  3    c  34
4  6    f  33
5  7    g  21

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2022-09-30
    • 2021-04-26
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多