我有这样一个数据框:
| 身份证|w1|w2|w3|w4|w5|w6|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 十一|光|光|光|光|光|光|
| 二十二|光|光|光|光|培养基|培养基|
| 三十三|光|光|培养基|培养基|培养基|沉重|
| 四十四|光|光|培养基|不适用|不适用|不适用|
| 五十五|光|光|培养基|培养基|不适用|不适用|
| 六十六|培养基|培养基|培养基|不适用|不适用|不适用|
我想得到w1-w 6中每个id的轻、中、重的频率计数,并且我想得到w1-w 6的模式作为一个新列。
目标df应该如下所示:
| 身份证|w1|w2|w3|w4|w5|w6|N_光|N_中等|N_重度|最后的|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 十一|光|光|光|光|光|光|六个|无|无|光|
| 二十二|光|光|光|光|培养基|培养基|四个|第二章|无|光|
| 三十三|光|光|培养基|培养基|培养基|沉重|第二章|三个|1个|培养基|
| 四十四|光|光|培养基|不适用|不适用|不适用|第二章|1个|无|光|
| 五十五|光|光|培养基|培养基|不适用|不适用|第二章|第二章|无|光|
| 六十六|培养基|培养基|培养基|不适用|不适用|不适用|无|三个|无|培养基|
真实的的 Dataframe 有数百万行。我很难找到一种有效的方法来做到这一点。有什么想法吗?
我尝试了DescTools库中的Mode函数,它在for循环中处理有限的行数,但是运行起来太慢了。
3条答案
按热度按时间piv4azn71#
我知道这需要
dplyr
,但是如果其他人发现base R有用,您可以简单地索引和使用*apply
函数输出:
uplii1fm2#
在Base R中,您可以执行以下操作:
qxgroojn3#
下面是一个
tidyverse
解决方案:如果最终目标是计算三个新列的众数,那么这可能是一种可行的方法:
数据: