使用 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 根据另一列中的类别计算列和列表之间常见值的百分比的主要内容,如果未能解决你的问题,请参考以下文章

SQL:根据另一列和上面的读取行连接列中的数据

使用 Filter 或 If Else 根据 R 中另一列中的值过滤指标

如何根据bigquery中另一列中的重复值计算一列

excel:根据另一列中的顺序对十进制值列表进行排序

遍历列中的每个类别并将另一列中的值添加为单独的 df

Pyspark根据另一列的模式替换列中的字符串