【发布时间】:2021-10-18 13:30:10
【问题描述】:
有谁知道如何将单元格的值替换为该值在列中出现的频率?我正在尝试将一个充满品种标签和基因因子的数据框转换为频率图(稍后会查看一个基因的共同等位基因的动物是否也倾向于具有其他基因的共同等位基因)。例如,我的初始数据框如下所示:
Breed Gene A Gene B Gene C
Collie 3 5 8
Collie 5 7 2
Lab 3 3 1
Pug 3 7 8
Pug 3 7 9
Pug 4 4 9
我希望结果如下所示:
Breed Gene A Gene B Gene C
2 4 1 2
2 1 3 1
1 4 1 1
3 4 3 1
3 4 3 2
3 1 1 2
我可以看到如何使用 for 循环来执行此操作(创建新的数据帧,遍历每一列,遍历每一行,将每个值更改为遇到相等值时加一的计数器),但是有更简单有效的 apply 或 dplyr 方法吗?数据集很大,我会经常重新运行,我担心嵌套的 for 循环会太慢。
【问题讨论】:
-
要直观地检查数据,可以尝试绘制它:
image(sapply(df, function(i) as.integer(as.factor(i))))