我试图弄清楚如何合并/连接两个数据帧,这样做的方式是:如果满足某一条件,R将两个数据帧中的两行合并成一行,但如果不满足该条件,R在原始数据帧中不存在的列中添加一个带有NAs的新行。我不清楚这是否是一个比我想象的更简单的连接,但我一直无法弄清楚如何做到这一点,甚至在阅读了一些堆栈溢出结果(例如或例如)之后。
下面是两个示例数据帧:
df1 <- data.frame(Name_df1 = c("Alan", "Steve", "Melanie", "Steve", "Melanie"),
Date_df1 = c("02/18/2008", "02/18/2008", "03/14/2009", "04/19/2009", "03/16/2009"),
Job_df1 = c("Cook", "Security", "Greeter", "Security", "Greeter"),
Hours_df1 = c(8.5, 7.0, 6.0, 7.0, 6.0))
df2 <- data.frame(Name_df2 = c("Steve", "Alan", "Melanie", "Melanie", "Steve", "Carter"),
Date_df2 = c("02/18/2008", "02/18/2008", "03/14/2009", "03/17/2009","04/25/2009", "08/15/2011"),
Job_df2 = c("Police", "Chef", "Greeter", "Greeter", "Security", "Doorman"),
Hours_df2 = c(8.5, 7.0, 6.0, 7.0, 7.0, 6.5),
Wage_df2 = c(80, 77, 127.5, 90, 145, 100))
但是,如果“name_df1”/“name_df2”列中的值和“date_df1”/“date_df2”列中的值不完全匹配,则df3应该获得一个行,该行仅包括来自“name_df1”、“date_df1”、“job_df1”和“hours_df1”中的df1的信息,以及来自“name_df2”、“date_df2”、“job_df2”、“hours_df2”和“wage_df2”中的NAs的信息。或者,如果原始行来自df2,那么df3应该获得一个仅包括来自“NAME_DF2”、“DATE_DF2”、“JOB_DF2”、“HOURS_DF2”和“WAGE_DF2”中的df2的信息,以及“NAME_DF1”、“DATE_DF1”、“JOB_DF1”和“HOURS_DF1”中的NAs的信息的行。
我知道这是一个嘴巴,但基于上面指定的df1和df2,这就是df3的样子:
df3 <- data.frame(Name_df1 = c("Alan", "Steve", "Melanie", "Steve", "Melanie", NA, NA, NA),
Name_df2 = c("Alan", "Steve", "Melanie", NA, NA, "Melanie", "Steve", "Carter"),
Date_df1 = c("02/18/2008", "02/18/2008", "03/14/2009", "04/19/2009", "03/16/2009", NA, NA, NA),
Date_df2 = c("02/18/2008", "02/18/2008", "03/14/2009", NA, NA, "03/17/2009", "04/25/2009", "08/15/2011"),
Job_df1 = c("Cook", "Security", "Greeter", "Security", "Greeter", NA, NA, NA),
Job_df2 = c("Chef", "Police", "Greeter", NA, NA, "Greeter", "Security", "Doorman"),
Hours_df1 = c(7.0, 7.0, 6.0, 7.0, 6.0, NA, NA, NA),
Hours_df2 = c(7.0, 8.5, 6.0, NA, NA, 7.0, 7.0, 6.5),
Wage_df2 = c(77.0, 80, 127.5, NA, NA, 90.0, 145.0, 100))
有人能帮我吗?
您似乎正在查找full_join
,但要获得所需的准确输出(DF3
),需要执行一些操作。
library(dplyr)
full_join(df1, df2, by = c('Name_df1' = 'Name_df2', 'Date_df1' = 'Date_df2')) %>%
mutate(Name_df2 = ifelse(is.na(Job_df2), NA, Name_df1),
Name_df1 = ifelse(is.na(Job_df1), NA, Name_df1),
Date_df2 = ifelse(is.na(Job_df2), NA, Date_df1),
Date_df1 = ifelse(is.na(Job_df1), NA, Date_df1)) %>%
select(starts_with('Name'), starts_with('Date'), starts_with('Job'), everything())
# Name_df1 Name_df2 Date_df1 Date_df2 Job_df1 Job_df2 Hours_df1 Hours_df2 Wage_df2
#1 Alan Alan 02/18/2008 02/18/2008 Cook Chef 8.5 7.0 77.0
#2 Steve Steve 02/18/2008 02/18/2008 Security Police 7.0 8.5 80.0
#3 Melanie Melanie 03/14/2009 03/14/2009 Greeter Greeter 6.0 6.0 127.5
#4 Steve <NA> 04/19/2009 <NA> Security <NA> 7.0 NA NA
#5 Melanie <NA> 03/16/2009 <NA> Greeter <NA> 6.0 NA NA
#6 <NA> Melanie <NA> 03/17/2009 <NA> Greeter NA 7.0 90.0
#7 <NA> Steve <NA> 04/25/2009 <NA> Security NA 7.0 145.0
#8 <NA> Carter <NA> 08/15/2011 <NA> Doorman NA 6.5 100.0
我有一个pandas dataframe,我想在其中求和某些不规则间隔的日期之间的值。举个例子,我有这样的东西: 并且我知道这些总和的截止日期是2021-03-01、2021-03-04、2021-03-05,所以我想要截止日期和直到(但不包括)下一个截止日期产生的所有小部件的总和。所有不是截止日期的日期的值都为0。 这将产生如下所示的新列。 我怎么能在熊猫内部做到这一点呢?
我试图用这个代码从一个较小的数据帧中制作一个数据帧: 这给了我一个新的数据帧,根据这些条件是否满足,可以使用True或False。我如何让它给我一个数据帧,其中包含满足这些条件的行?
本文向大家介绍在某些情况下如何更改R数据帧中的列?,包括了在某些情况下如何更改R数据帧中的列?的使用技巧和注意事项,需要的朋友参考一下 有时,特定列的列值与另一列有某种关系,我们可能需要根据某些条件来更改该特定列的值。我们需要进行此更改,以检查列值的更改如何对所考虑的两个列之间的关系产生影响。在R中,我们可以使用单个方括号来更改列值。 示例 请看以下数据帧- 假设我们想从第2列(x2)值中减去2,
本文向大家介绍如何基于R数据帧中其他变量的条件创建带有二进制变量的列?,包括了如何基于R数据帧中其他变量的条件创建带有二进制变量的列?的使用技巧和注意事项,需要的朋友参考一下 有时我们需要创建额外的变量以添加有关当前数据的更多信息,因为它可以增加值。这在我们进行特征工程时特别有用。如果我们了解可能影响响应的某些内容,那么我们更愿意将其用作数据中的变量,因此我们将其与已有的数据结合起来。例如,创建另
我有一个不同长度的数据帧列表(df),按年份索引,数据的代理如下所示: