R语言学习记录:如何统计数据框每个观测的变量最大值并将其的值和变量名增为新的两列
Background:我遇到了这样的一个问题:每个地点(观测)都有两个属性(变量),我想找出每个地点中变量的值最大的那个变量是谁,以及它的变量名。
大概意思就是这样。然后思索了好久都没想出来怎么处理,因为对每一行取最值很容易,但是这里还包含了经纬度,所以不能用对每行取最值的方法。最后在Rstudio社区和Stack Overflow上提问,马上就得到了回答,人间自有真情在啊!
Rstudio community
Answer 1
这位大佬上来就给了4种解决方法(献上膝盖),2种base,2种dplyr。4种方法都用到了apply循环,比我当初想用的for循环简便了特别多。
Answer 2
还有一个大佬也给出了一种方法,主要是pmax函数,但是和后面的Stack Overflow的大佬给的法1稍稍有些不同。
Stack Overflow
Method 1
Simply use pmax
and max.col
function to identify the maximum values and columns.
这位大佬给的法1也是pmax,发现和上面的不同了么?
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.
这个方法就是我最开始想尝试的,但是当时卡在了确定type上。就是先把df变成长数据,处理完后再返回宽数据。这个是目前我最能看懂的。
总结:
R语言循环的高级操作还是apply家族函数,果然大家都鄙视R语言只用for循环。下一步抽个时间学一下apply函数。
tidyverse系列很厉害,但是学习成本太高,想要用的熟就必须牢记众多数据清洗函数,然而实际情况是,只有自己遇到某些问题的时候才会想到去查某些函数怎么用。而且如果这个project结束一段时间后,用到的函数就忘记了。