提取R中每行的次要等位基因计数

提取R中每行的次要等位基因计数,r,count,R,Count,试图在一组三列中提取次要等位基因计数。计数只是每行中每个等位基因出现的次数。我需要在不报告0的情况下提取最低数字。某些行的某一行中有0,这在最终次要计数中是不需要的。相等行的实例应将次要计数报告为相等值 我曾尝试过使用多行if-true语句,但由于不同场景的组合,这很麻烦,也不能完全解决问题 set.seed(100) df <- data.frame((sample(0:100,50)),(sample(0:100,50)),(sample(0:100,50))) names(df) &

试图在一组三列中提取次要等位基因计数。计数只是每行中每个等位基因出现的次数。我需要在不报告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"
我希望第四列中的每一行都有较小的计数。

您可以使用“应用”并在其中选择x[x>0]最小值,从计数大于0的地方获得列:

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
您可以使用“应用”并在此处选择,其中的x[x>0]最小值为0,并通过该值获得列的位置:

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

你可以用这个代码来做。在这里,函数pmin给出了一组向量的并行最小值,在这种情况下,数据帧上的3个变量

library(dplyr)

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

你可以用这个代码来做。在这里,函数pmin给出了一组向量的并行最小值,在这种情况下,数据帧上的3个变量

library(dplyr)

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

能否显示预期输出的前几行?我仍然不清楚你所说的小计数是什么意思。Ronak,我刚刚更新了它,进一步了解了我想要的结果。对我来说,你的第一行是73 77 71,你是如何从中得到31的?确保你使用的是set.seed100函数,因为我确信这在我这方面是正确的。我也使用了set.seed100,第一行是73 77 71。无论如何,我对您端生成的行值很好奇。您是否在@ConnorMurray获得了不同的行值?能否显示预期输出的前几行?我仍然不清楚你所说的小计数是什么意思。Ronak,我刚刚更新了它,进一步了解了我想要的结果。对我来说,你的第一行是73 77 71,你是如何从中得到31的?确保你使用的是set.seed100函数,因为我确信这在我这方面是正确的。我也使用了set.seed100,第一行是73 77 71。无论如何,我对您端生成的行值很好奇。您是否得到了不同的行值@ConnorMurray?我认为第二行代码工作不正常,它给了我一个奇怪的输出。这是第一排。cnAA=1,mac=4我认为第二行代码工作不正常,它给了我一个奇怪的输出。这是第一排。cnAA=1,mac=4