使用 R 根据另一列中的类别计算列和列表之间常见值的百分比
Posted
技术标签:
【中文标题】使用 R 根据另一列中的类别计算列和列表之间常见值的百分比【英文标题】:Calculate percentage of common values between a column and a list, based on categories in another column with R 【发布时间】:2022-01-23 04:39:23 【问题描述】:我非常坚持这个练习,所以如果有人能对此有所了解,我将不胜感激。我有一个包含两列的 dataframe,如下例所示:
V1 | V2 |
---|---|
100100 | rs-1 |
100100 | rs1597782599 |
100100 | rs1603359091 |
100100 | rs1603359205 |
100300 | rs372751467 |
100300 | rs3732413 |
100300 | rs387907031 |
100300 | rs9852894 |
100800 | rs-1 |
100800 | rs121913114 |
100800 | rs144995231 |
100800 | rs17883400 |
100800 | rs761325047 |
101000 | rs1060503667 |
101000 | rs1060503668 |
101000 | rs1060503669 |
101000 | rs1060503670 |
101000 | rs1060503671 |
以及dataset$V2
中的rs 代码列表。
我想要得到的是第 2 列和列表之间常见 rs 代码的百分比,但按 dataset$V1
中的代码分组。例如:
V1 | Common % |
---|---|
100100 | 25% |
100300 | 40% |
100800 | 50% |
101000 | 100% |
我尝试了几个选项,但都没有成功。例如,我正在尝试使用 tidyverse
group_by(dataframe$V1)
选项,但我不确定如何连接共同百分比的估计。
提前谢谢大家!
【问题讨论】:
【参考方案1】:我猜dataframe2
'的结构:
set.seed(42)
dataframe2 <- dataframe[sample(nrow(dataframe), size=10),]
dataframe2
# V1 V2
# 17 101000 rs1060503670
# 5 100300 rs372751467
# 1 100100 rs-1
# 9 100800 rs-1
# 10 100800 rs121913114
# 4 100100 rs1603359205
# 2 100100 rs1597782599
# 14 101000 rs1060503667
# 16 101000 rs1060503669
# 8 100300 rs9852894
基础 R
tmp <- merge(transform(dataframe2, orig=TRUE), dataframe, by = c("V1", "V2"), all = TRUE)
aggregate(orig ~ V1, data = tmp, FUN = function(z) 100 * sum(!is.na(z)) / length(z);, na.action = NULL)
# V1 orig
# 1 100100 75
# 2 100300 50
# 3 100800 40
# 4 101000 60
dplyr
library(dplyr)
dataframe2 %>%
mutate(orig = TRUE) %>%
full_join(., dataframe, by = c("V1", "V2")) %>%
group_by(V1) %>%
summarize(common = 100 * sum(!is.na(orig)) / n()) %>%
ungroup()
# # A tibble: 4 x 2
# V1 common
# <int> <dbl>
# 1 100100 75
# 2 100300 50
# 3 100800 40
# 4 101000 60
【讨论】:
这个解决方案完全帮助了我。非常感谢! 由于您是新来的 SO:如果答案解决了您的问题,请accept it 有几个原因。不用着急,一个常见的策略是将问题保留一到三天以获取可能的其他答案/方法,但请记住回来接受。 (如果仍然需要某些东西,您需要说出来并明确指出错误/不同之处。)谢谢!以上是关于使用 R 根据另一列中的类别计算列和列表之间常见值的百分比的主要内容,如果未能解决你的问题,请参考以下文章