【问题标题】:R Get values from multiple other data.frames depending on condition [duplicate]R根据条件从多个其他data.frames中获取值[重复]
【发布时间】:2020-12-28 19:19:08
【问题描述】:

我有一个 data.frame ids 的索引列是人员 ID 号。

ID
PA1
PA2
PA3
PA4 
PA5 etc

我想从其他 2 个数据帧中提取每个人的年龄和性别,df1df2 有详细信息(带有不同的标题),每个都只包含总样本人口的一部分,尽管有可能有些重叠,但 ids 包含的行数比 df1df2 组合的多:

df1

ID  Sex  Age  Mode
PA1  M   34   HD
PA3  F   45   PD

df2

ID  Gender  Age   
PA4  M      67
PA3  F      45
PA2  M      65

总共有大约 1700 行数据。我想从df1df2 中获取SexGenderAge,并将它们与正确的ID 放在ids data.frame 的新列中,所以我明白了:

ID   Age   Sex
PA1  34    M
PA2  65    M
PA3 etc...
PA4 
PA5 

df1df2 都包含我在ids 中不需要的其他数据列,所以我不认为我想使用left_join 或合并。 我正在考虑用dlplyr做这样的事情:

ids = ids%>%
   mutate("Sex" = case_when(df1$Gender != "" ~df1$Gender, TRUE ~"" ))

如果为空则查看df2 但意识到这与正确 ID 的值不匹配。 ID当前在不同的data.frames中的顺序不同

【问题讨论】:

  • 我可以使用applyif 语句吗?

标签: r dataframe dplyr merge conditional-statements


【解决方案1】:

您可以使用left_join,然后只使用select 您需要的列:

library(dplyr)

ids %>%
  left_join(df1 ,by = 'ID') %>%
  left_join(df2, by = 'ID') %>%
  select(ID, Age, Sex)

如果有很多公共列导致.x.y加入后的列,你可以先select相关列再加入。

ids %>%
  left_join(df1 %>% select(Age, Mode), by = 'ID') %>%
  left_join(df2 %>% select(Sex), by = 'ID')

【讨论】:

  • 当我这样做时,我最终会得到两个年龄库和 2 个性别库:Age.xAge.ySex.xSex.y。我想这是因为某些 ID 对 df1 和 df2 都是通用的
  • 我认为这是因为您在 df1df2 中都有 AgeSex 列?也许您需要在selectAge.x 中添加其中一个或在by 中添加它们,即by = c('ID', 'Sex', 'Age')
  • 谢谢。但我需要来自 df1df2 的性别和年龄数据,因为它们有不同的 ID,尽管有些重叠。
  • 我可以为一个 df 左连接和一个 for 语句来填补空白吗?
  • 您是否需要full_join 以便所有 id 都存在于最终数据框中?是否可以使用idsdf1df2 创建一个可重现的小示例,并为其显示预期输出,以便清楚您想要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
相关资源
最近更新 更多