原标题:R下如何实现VLOOKUP函数功能

缘起:

当我怀着对周末生活的美好憧憬等待下班的时候,突然领导拿着N份Excel表要求将上面的数据按月汇总到另一张Excel表中(汇总表格如题图)。也许领导也知道工作量不小,临走时留一下句:“辛苦一下,加加班,周一给我!”嘴上机械的回道:“好的”,心里羊驼狂奔,脑中各种处理方法快速闪过,最后定格在“VLOOKUP函数”。作为Excel中最强大的函数之一 ,vlookup果然不负重望,完美地汇总了数据,关键保住准时下班。

我的问题 Excel的vlookup那么强大,在R中能实现嘛?

我的尝试 在《R语言实战》的第四章-4.9.1 添加列(P76)提到 merge() 函数可以根据一个或多个共有变量把两个数据框联结起来。可是实践结果(如下图)告诉我,merge()函数是行不通的。因为两个数据框中变量Month的观测量不一致,所以联结的结果以观测量少的数据框准把部分Month丢掉了。

有问题找谷哥,关键词:how to vlookup in r

很给力,第一个结果就给出了四种解决方案

但很遗憾,似乎R中的“Vlookup()函数”就是merge()函数,难道共有变量的观测数就一定要相同嘛?在反复阅读搜索结果后,发现了特别说明,找到了希望:

sqldf()效果还不错,Month都留下了(如下图),但NA怎么处理呢?Excel中Ctrl+H,可以轻松用任意字符把NA 替换掉

量重编码)可以实现NA替换为“0”。

实践进阶 既然myframesqldf[2][is.na(myframesqldf[2])]

结果并不理想,与sqldf()做出的完全不同。什么原因呢?是两个数据框的共有变量的观测数不一致嘛??还是两个向量不能直接进行比较呢?或者说两个向量的运算规则是什么样的?用paste()函数做一下实验(《R语言实战》P90)

不难看出,两个向量的运算是可以进行比较等运算的,但其运算规则并不是我之前想象那样,某个向量的每一个观测与另一个向量的每一个观测进行运算,而是以观测数大的向量为线索,观测数小的向量按自身顺序循环进行运算。为了实现某个向量的每一个观测与另一个向量的每一个观测进行运算,我想到了for()函数。

结果和Excle的VLookup完全一致。

我的代码:

##待汇总数据准备

zs

ls

ww

cy

le

tb

Month

myframe

#sqldf包法 ps: install.packages("sqldf")

library(sqldf)

data.frame( Month=as.character( Month),stringsAsFactors = FALSE)

myframe1

names(myframe1)[ 2]

myframesqldf[ 2][is.na(myframesqldf[ 2])]

##双for()函数法

for(i in1:length(zs $Month)){ for(j in1:length(myframe $Month)){ if(myframe $Month[j]==zs $Month[i])myframe $zs[j]

for(i in1:length(ls $Month)){ for(j in1:length(myframe $Month)){ if(myframe $Month[j]==ls $Month[i])myframe $ls[j]

for(i in1:length(ls $Month)){ for(j in1:length(myframe $Month)){ if(myframe $Month[j]==ww $Month[i])myframe $ww[j]

for(i in1:length(ls $Month)){ for(j in1:length(myframe $Month)){ if(myframe $Month[j]==cy $Month[i])myframe $cy[j]

for(i in1:length(ls $Month)){ for(j in1:length(myframe $Month)){ if(myframe $Month[j]==le $Month[i])myframe $le[j]

for(i in1:length(ls $Month)){ for(j in1:length(myframe $Month)){ if(myframe $Month[j]==tb $Month[i])myframe $tb[j]

##单for()函数法

for(i in1:length(zs $Month)){myframe $zs[myframe $Month==zs $Month[i]]

for(i in1:length(ls $Month)){myframe $ls[myframe $Month==ls $Month[i]]

for(i in1:length(ww $Month)){myframe $ww[myframe $Month==ww $Month[i]]

for(i in1:length(cy $Month)){myframe $cy[myframe $Month==cy $Month[i]]

for(i in1:length(le $Month)){myframe $le[myframe $Month==le $Month[i]]

for(i in1:length(tb $Month)){myframe $tb[myframe $Month==tb $Month[i]]

感谢:

谢谢您花时间读到这里,尤其是作出评论的亲。数据分析学习之路,有您真好!

kaolixin,天善智能社区专家。

Blog:https://ask.hellobi.com/blog/kaolixin

微课推荐:(阅读原文报名)返回搜狐,查看更多

责任编辑:

计算机语言VLOOKUP,R下如何实现VLOOKUP函数功能相关推荐

  1. python有vlookup的功能么,vlookup函数功能非常强大,那在Python中如何实现?

    vlookup函数功能非常强大,那在Python中如何实现? vlookup函数功能非常强大,那在Python中如何实现? 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原 ...

  2. excel中vlookup函数的使用方法_vlookup函数功能非常强大,那在Python中如何实现?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于艾然飞翔,作者宁晨 前言 在exce中vlookup函数功能非常强大 ...

  3. vlookup函数功能非常强大,那在Python中如何实现?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于艾然飞翔,作者宁晨 前言 在exce中vlookup函数功能非常强大 ...

  4. 计算机一级表格函数vlookup的使用,Excel表格VLOOKUP函数的应用!

    计算机二级在即,距离考试也只有1个月左右了!报了计算机二级MS office的我这段时间一直在为寒假没有刷题做弥补!这不,由于是小白参考(参加考试,简称参考).这不,昨天对着题库来练习表格题.在MS ...

  5. R语言使用upper.tri函数、lower.tri函数、diag函数改变matrix矩阵上三角形、下三角形、对角线的数值

    R语言使用upper.tri函数.lower.tri函数.diag函数改变matrix矩阵上三角形.下三角形.对角线的数值 目录

  6. R语言相关关系可视化函数梳理(附代码)

    来源:R语言中文社区 作者:赵镇宁 本文约3177字,建议阅读6分钟. 本文为你介绍R语言相关关系可视化的函数进行了初步梳理,大家可根据个人需求及函数功能择优选择. 当考察多个变量间的相关关系时,通常 ...

  7. Linux中assert头文件,linux系统下如何使用assert函数

    linux系统下如何使用assert函数 只要看得懂程序的人都知道assert,在Windows下使用VC编写,使用assert之后,只需在IDE中设置为debug版或者是release版,编译器就会 ...

  8. vlookup使用步骤_使用vlookup出错,看看原因多为这几个!快来看看!

    你还在为vlookup函数出错怎么办而苦恼吗,今天教你vlookup函数出错怎么办,让你告别vlookup函数出错怎么办的烦恼. vlookup函数 1.输入的数据不规范含空格 11.空格的问题.有时 ...

  9. R语言对数线性模型loglm函数_用R语言进行数据分析:常规和广义线性模型

    用R语言进行数据分析:常规和广义线性模型 线性模型 对于常规的多重模型(multiple model)拟合,最基本的函数是lm(). 下面是调用它的方式的一种改进版: >fitted.model ...

最新文章

  1. ASP.NET 制作让搜索引擎可以友好访问的链接
  2. android Fragments详解五:与activity通讯
  3. 开启 J2EE(七)— Model1、Model2和三层架构的演变
  4. FileChannel应用实例——拷贝文件transferFrom方法
  5. 【Paper】2021_Analysis of the Consensus Protocol of Heterogeneous Agents with Time-Delays
  6. 主成分分析(PCA)和独立成分分析(ICA)相关资料
  7. dash使用_使用Dash和SHAP构建和部署可解释的AI仪表盘
  8. MySQl的一些基本知识(1)
  9. [html] 表单可以跨域吗?
  10. JdbcTemplate(操作数据库-修改和删除功能)
  11. bzoj 2245 [SDOI2011]工作安排【最小费用最大流】
  12. C语言构建一个链表以及操作链表
  13. oracle修改字段的默认,oracle系统默认的账号ORACLE修改表字段的数据类型
  14. Linux GPIO键盘驱动开发记录_OMAPL138
  15. IJCAI阿里论文 | JUMP: 一种点击和停留时长的协同预估器...
  16. Redis安装及HA(High Availability)配置
  17. hdu1251统计难题
  18. 安装SqlServer 2017 时出现“Polybase要求安装Oracle JRE 7 更新51(64位)或更高版本规则失效”报错的解决办法
  19. 十大程序员最实用的技术社区网站
  20. word回车后间距太大_word 里字体变大后再回车,两行间距太大怎么办

热门文章

  1. 记疫情无聊时对老师答题网站的一次渗透(1)
  2. C++ QT开发人机象棋(鼠标点击)
  3. C/C++:实现象棋游戏
  4. 出圈游戏c语言用指针求,出圈游戏程序设计.doc
  5. intel第6代服务器芯片,Intel第六代处理器 Skylake CPU、GPU、主板完全解析
  6. [Zookeeper-3.6.2源码解析系列]-14-Zookeeper使用到的Reactor网络模型原理分析
  7. Android Fragment重叠问题解决
  8. linux 实验感悟_linux实训心得_linux实习心得体会范文
  9. 有哪些布局精心、长久的骗局?
  10. 舞动DB2图书签售火爆 部分作者现身中关村图书大厦