【问题标题】:Extracting minor allele counts in each row in R在R中的每一行中提取次要等位基因计数
【发布时间】:2020-02-01 19:40:15
【问题描述】:

尝试在一组三列中提取次要等位基因计数。计数只是在每行中看到每个等位基因的次数。我需要在不报告 0 的情况下提取最小的数字。有些行在其中一行中有 0,这在最终的次要计数中是不需要的。相等行的实例应将次要计数报告为相等值。

我尝试过使用多行 if (true) 语句,但这很麻烦,并且由于不同场景的组合,并不能完全解决问题。

set.seed(100)
df <- data.frame((sample(0:100,50)),(sample(0:100,50)),(sample(0:100,50)))
names(df) <-c("nAA", "nAa", "naa")

# Minor count output
df[1,] <- "31"
df[2,] <- "19"
df[3,] <- "4"

我希望第四列包含每行的次要计数。

【问题讨论】:

  • 你能显示预期输出的前几行吗?我仍然不清楚您所说的次要计数是什么意思。
  • Ronak,我刚刚更新了它,进一步了解了我想要的结果。
  • 对我来说,您的第一行是73 77 71,您如何从中获得 31?
  • 确保您使用的是 set.seed(100) 函数,因为我确信这对我来说是正确的。
  • 我也用过set.seed(100),第一行是73 77 71。无论如何,我对您最后生成的行值感到好奇。你有没有得到不同的行值@ConnorMurray?

标签: r count


【解决方案1】:

您可以使用apply 并在此处选择x[x&gt;0] minimum from counts lager 0 并使用which 获得它所在的列:

apply(df, 1, function(x) min(x[x>0])) #will give you the minimum
apply(df, 1, function(x) which(x==min(x[x>0]))) #will give you the column of the minumum

【讨论】:

  • 我不认为第二行代码工作正常,它给了我一个奇怪的输出。这是第一行。 c(nAA = 1, mac = 4)
【解决方案2】:

您可以使用此代码进行操作。这里的函数pmin 为您提供一组向量的并行最小值(在这种情况下,您的数据帧上的 3 个变量)。

library(dplyr)

mutate(df, min = pmin(nAA, nAa, naa))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多