日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机语言VLOOKUP,R下如何实现VLOOKUP函数功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題: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函数功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。