我有以下虚拟数据集:
MYdata = data.frame(fruit = c("apple", "apple", "apple", "apple", "apple", "apple", "apple", "pear", "pear", "pear", "pear", "pear", "pear", "lemon", "lemon", "lemon", "lemon", "lemon", "orange", "orange", "orange", "orange", "plum", "plum", "plum", "plum"), p = c(0.013, 0.018, 0.022, 0.035, 0.001, 0.030, 0.046, 0.031, 0.010, 0.017, 0.035, 0.054, 0.038, 0.038, 0.038, 0.036, 0.042, 0.043, 0.056, 0.062, 0.055, 0.031, 0.023, 0.003, 0.013, 0.009), f = c(3.4, 5.5, 4.4, 3.9, 3.7, 3.0, 1.5, 1.3, 2.4, 1.1, 3.6, 1.4, 1.5, 3.3, 2.0, 1.5, 1.4, 2.1, 4.0, 2.2, 1.7, 3.2, 4.9, 4.4, 2.1, 1.2))
(A) 我想添加列“t”。“t”的每个单元格中的值基于“p”和“f”中的值:
如果 p<0.05 AND f>2 则在“fruit”下写入相应单元格的内容,否则写入“ns”。
(这对你们来说可能很容易,但我无法专注于编写函数)
(B) 我想添加“顶部”列。“top”列中每个单元格的内容取决于水果在“t”列中出现的次数。我有兴趣保留“t”中发现的两种最丰富的水果(“ns”不被视为水果)。
如果“t”单元格中的水果是所有“t”中最丰富的两个水果之一,则将水果名称写入“top”对应的单元格,否则写入“other”。如果“t”的单元格包含“ns”,则将“ns”写入“top”。
背景:
使用我的真实数据集,我想创建一个火山图(在 ggplot2 中),并且我只想对那些通过某个阈值的“水果”进行颜色编码。因此,颜色编码将基于“t”列中的信息。
因为我有数百个“水果”,所以当我创建情节时,我的图例空间和颜色已经用完了。因此,我只想对通过阈值的前 10 个“水果”进行颜色编码,并将通过阈值的剩余“水果”分组到“其他”下。
解决了!(A) 部分是用 baptiste 的脚本解决的。(B) 部分是通过结合 baptiste 的脚本和 jbaums 的脚本来解决的:
MYdata = transform(MYdata, top = ifelse(t == "ns", "ns", ifelse(t %in% names(sort(table(t), dec=T))[names(sort(table(t), dec=T))!="ns"][1:2], levels(t)[t], "other")))
多谢你们!