r - 在给定条件下,在大型数据框中找到正确的单元格值
问题描述
我有两个大数据框,比如 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'])
但我只给了我一个值。
希望你们中的一些人理解我的问题,并能帮助我。我的主要问题是运行时间太长。
解决方案
正如评论中所述,您可以使用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.y
df1
如果您愿意,可以left_join
从dplyr
包装中使用。您可以查看此stackoverflow 帖子。
推荐阅读
- python - 在 Maya 中使用 Python 过滤列表/条件
- python - sqlite3.OperationalError:在“ORDER”附近:语法错误
- vba - 如何从Word中提取嵌入的文件
- java - 关于docker-java的withCmd命令
- reactjs - 使用 useReducer 和其他 reducer 清除表单
- matlab - FFT(快速傅立叶变换)的频率分辨率(或增量)
- python - MaxPooling2D 给出 ValueError
- list - Haskell 编译器在简单列表代码上的错误
- cuda - CUDA cudaMemcpyAsync 使用单个流来托管
- python - 通过python具有多个组的ngroup