R语言多条件提取DataFrame值并添加至新列的技术需求
提取DataFrame对应值的解决方案
我来帮你搞定这个从df1提取对应值到df2的需求,先理清楚问题和可行的实现方法:
问题背景
你已经创建了两个R DataFrame:
set.seed(100) x1= rnorm(4) x2= rnorm(4) x3= rnorm(4) x4= rnorm(4) x5= rnorm(4) x6= rnorm(4) x7= rnorm(4) x8= rnorm(4) x9= rnorm(4) x10= rnorm(4) df1 = data.frame(Station1 = x1, Station2 = x2, Station3 = x3, Station4 = x4, Station5 = x5, Station6 = x6, Station7 = x7, Station8 = x8, Station9 = x9, Station10 = x10) x1= c("Station1", "Station2", "Station3", "Station4", "Station5", "Station6", "Station7", "Station8", "Station9", "Station10") x2= seq(-2,10 , length=10) x3= seq(30, 45, length=10) x4= c(1, 3, 2, 1, 4, 2, 4, 3, 3, 1) x5= seq(4, 16, length=10) df2 = data.frame(Station=x1, Lon=x2, Lat=x3, Number=x4, Mis=x5)
核心需求是:给df2新增一列,每一行的值来自df1中对应Station列的第Number行——比如df2里Station2的Number是3,就取df1$Station2的第3行值-0.5817907。
两种实现方法
方法一:Base R 原生实现
用mapply就能轻松逐行匹配提取,代码简洁直接:
# 添加提取的新列 df2$Extracted_Value <- mapply( function(station_name, row_index) { df1[[station_name]][row_index] }, df2$Station, df2$Number ) # 查看结果 print(df2)
方法二:Tidyverse 工具链实现
如果你习惯用dplyr这类工具,结合purrr的映射函数会更直观:
# 先加载需要的包 library(dplyr) library(purrr) # 新增提取列 df2 <- df2 %>% mutate(Extracted_Value = map2_dbl(Station, Number, ~ df1[[.x]][.y])) # 验证结果 print(df2)
map2_dbl会成对遍历Station和Number的元素,精准提取df1中对应位置的值,返回数值型向量直接作为新列。
验证示例结果
运行代码后,df2的Extracted_Value列应该是:
[1] -0.50219235 -0.58179070 -0.35986213 -0.20163395 2.31029680 0.76406060 0.23094450 -0.09111356 -0.69001430 0.18290770
完全符合你需要的提取规则~
内容的提问来源于stack exchange,提问作者Essi
相关产品推荐
相关产品推荐

