R語言學(xué)習(xí)記錄:如何統(tǒng)計(jì)數(shù)據(jù)框每個(gè)觀測(cè)的變量最大值并將其的值和變量名增為新的兩列
Background:我遇到了這樣的一個(gè)問題:每個(gè)地點(diǎn)(觀測(cè))都有兩個(gè)屬性(變量),我想找出每個(gè)地點(diǎn)中變量的值最大的那個(gè)變量是誰,以及它的變量名。
大概意思就是這樣。然后思索了好久都沒想出來怎么處理,因?yàn)閷?duì)每一行取最值很容易,但是這里還包含了經(jīng)緯度,所以不能用對(duì)每行取最值的方法。最后在Rstudio社區(qū)和Stack Overflow上提問,馬上就得到了回答,人間自有真情在??!
Rstudio community?
Answer 1
這位大佬上來就給了4種解決方法(獻(xiàn)上膝蓋),2種base,2種dplyr。4種方法都用到了apply循環(huán),比我當(dāng)初想用的for循環(huán)簡便了特別多。
Answer 2
還有一個(gè)大佬也給出了一種方法,主要是pmax函數(shù),但是和后面的Stack Overflow的大佬給的法1稍稍有些不同。
Stack?Overflow
Method 1
Simply use?pmax
?and?max.col
?function to identify the maximum values and columns.
這位大佬給的法1也是pmax,發(fā)現(xiàn)和上面的不同了么?
Method 2
Or first re-shape your data to a "long" format for easier manipulation. Then use?mutate
?to extract?max
?values and names. Finally change it back to a "wide" format and?relocate
?columns according to your target.
這個(gè)方法就是我最開始想嘗試的,但是當(dāng)時(shí)卡在了確定type上。就是先把df變成長數(shù)據(jù),處理完后再返回寬數(shù)據(jù)。這個(gè)是目前我最能看懂的。
總結(jié):
R語言循環(huán)的高級(jí)操作還是apply家族函數(shù),果然大家都鄙視R語言只用for循環(huán)。下一步抽個(gè)時(shí)間學(xué)一下apply函數(shù)。
tidyverse系列很厲害,但是學(xué)習(xí)成本太高,想要用的熟就必須牢記眾多數(shù)據(jù)清洗函數(shù),然而實(shí)際情況是,只有自己遇到某些問題的時(shí)候才會(huì)想到去查某些函數(shù)怎么用。而且如果這個(gè)project結(jié)束一段時(shí)間后,用到的函數(shù)就忘記了。