【问题标题】:transferring certain data from one data frame based on values another data frame [duplicate]根据另一个数据帧的值从一个数据帧传输某些数据[重复]
【发布时间】:2021-10-28 09:55:45
【问题描述】:
library(dplyr)
library(readr)
library(tidyverse)
library(tidyr)

我有 2 个单独的数据框,它们有一个共同的列。我需要来自包含生日和性别的列的信息,才能被扔到另一个数据框中。一些样本数据: 威士忌酒:

person <- c('asdfe', 'twlkjdo', 'threwerlkqje', 'foudafljkr', 'fivwnerlke', 'sialkdsfjx', 'sevnvreen', 'eigvjnsht', 'ninvwjkne', 'trvnjn')
first_whiskey <- c('1990-12-24', '1989-01-01', '1972-05-20', '2000-01-01', '1999-12-31', '2019-02-28', '2004-04-23', '2008-08-08', '1999-02-19', '2015-08-09')
reason <- c('doomsday', 'doomsday', 'doomsday', 'doomsday', 'doomsday', 'sad', 'doomsday', 'doomsday', 'doomsday', 'doomsday')

whiskey_drinkage <- data.frame(person,first_whiskey,reason)

以下是因为我不知道如何在 data.frame 构建期间将日期保存为日期(!!!但这不是这里的重要部分!!!)。

whiskey_drinkage$first_whiskey <- whiskey_drinkage$first_whiskey %>% as.Date.character(whiskey_drinkage, format="%Y-%m-%d")

数据2:

person <- c('asdfe', 'twlkjdo', 'threwerlkqje', 'foudafljkr', 'fivwnerlke', 'sialkdsfjx', 'sevnvreen', 'eigvjnsht', 'ninvwjkne', 'trvnjn', 'asdfwfe', 'twlkqerwdo', 'threwerewqje', 'foudaerwljkr', 'fivwhfglke', 'sifghdkdsfjx', 'dfghd', 'dfghdfgs', 'adfssdqqqq', 'dfksldkf')
sex <- c('M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'F', 'M', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'F', 'M')
birthday <- c('1932-02-24', '1979-01-01', '1932-07-12', '1900-01-01', '1994-03-13', '2000-01-01', '1945-05-05', '1980-08-08', '1979-01-11', '2000-04-01', '1932-02-24', '1979-01-01', '1932-07-12', '1900-01-01', '1994-03-13', '2000-01-01', '1945-05-05', '1980-08-08', '1979-01-11', '2000-04-01')

data2 <- data.frame(person,sex,birthday)

同样的故事,仍然不重要的部分()

data2$birthday <- data2$birthday %>% as.Date.character(data2, format="%Y-%m-%d")
head(whiskey_drinkage,10)
head(data2,10)

现在我想做的是从 data2 中获取“性别”和“生日”信息,但只能从已经在“whiskey_drinkage”中注册的人那里获取信息。 目标是最终得到以下数据集:

person <- c('asdfe', 'twlkjdo', 'threwerlkqje', 'foudafljkr', 'fivwnerlke', 'sialkdsfjx', 'sevnvreen', 'eigvjnsht', 'ninvwjkne', 'trvnjn')
first_whiskey <- c('1990-12-24', '1989-01-01', '1972-05-20', '2000-01-01', '1999-12-31', '2019-02-28', '2004-04-23', '2008-08-08', '1999-02-19', '2015-08-09')
reason <- c('doomsday', 'doomsday', 'doomsday', 'doomsday', 'doomsday', 'sad', 'doomsday', 'doomsday', 'doomsday', 'doomsday')
sex <- c('M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'F', 'M')
birthday <- c('1932-02-24', '1979-01-01', '1932-07-12', '1900-01-01', '1994-03-13', '2000-01-01', '1945-05-05', '1980-08-08', '1979-01-11', '2000-04-01')

data3 <- data.frame(person, first_whiskey, reason, sex, birthday)
data3$birthday <- data3$birthday %>% as.Date.character(data3, format="%Y-%m-%d")
data3$first_whiskey <- data3$first_whiskey %>% as.Date.character(data3, format="%Y-%m-%d")
data3

重要提示:在本例中,只是前 10 行被传输,但在我的真实数据集中,我注册了 1000 多个不同的人,需要提取的人分散在整个数据集中。

【问题讨论】:

  • 你试过merge(whiskey_drinkage, data2)吗?
  • 罗纳克。非常感谢,这正是我所需要的!

标签: r transfer


【解决方案1】:

如果我猜对了,你可以使用 left_join

`data3 <- data1 %>% left_join(data2, by='person')`

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2019-07-15
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多