首页 > 解决方案 > 在给定条件下,在大型数据框中找到正确的单元格值

问题描述

我有两个大数据框,比如 df1 和 df2。在特定条件下,我想向 df2 添加一个值。

df2 包含人-即:

> df2
  ID Age Gender
1  1  20      M
2  2  30      K
3  3  40      M
4  4  60      M

然后我有 df1 ,其中包含很多信息,每个年龄从 0 到 100 和每个性别都有一个数字。我需要为我的人找到 korrekt 号码。说我查找年龄 30 我得到

> df1[df1[,'V10'] == 30,]
    V5 V10  V12
31   K  30 5.91
151  M  30 5.33

在 df2 中,我想要 5.91 的值,因为我的 persen 是女性。像这样

> df1[df1[,'V10'] == 30 &
+       df1[,'V5'] == 'K', 'V12']
[1] 5.91

首先,我在 for 循环中尝试了此操作,但耗时太长。然后我尝试了()

df2$number <- with(df2, df1[df1[,'V10'] == Age &
                              df1[,'V5'] == Gender, 'V12'])

但我只给了我一个值。

希望你们中的一些人理解我的问题,并能帮助我。我的主要问题是运行时间太长。

标签: r

解决方案


正如评论中所述,您可以使用merge来获取V12每个性别和年龄的值。

我创建了一些虚拟数据来展示它是如何完成的。

df2 <- data.frame(ID = 1:6,
              Age = c(20,30,40, 40, 60, 60),
              Gender = c("M","K","M", "K", "M", "K"))

df1 <- data.frame(V5 = rep(c("K", "M"), 41),
              V10 = rep(20:60, each= 2),
              V12 = runif(82, 1,10))

df <- merge(df2, df1, by.x=c("Age", "Gender"), by.y=c("V10", "V5"))

使用该merge()函数,您可以通过在参数中指定列名来合并多个列by

by.x它用于第一个data.frame用作输入的列(在df2这种情况下)和.by.ydf1

如果您愿意,可以left_joindplyr包装中使用。您可以查看stackoverflow 帖子。


推荐阅读