【问题标题】:How to average a row over three columns如何平均三列中的一行
【发布时间】:2014-08-05 04:54:14
【问题描述】:

我确定这很简单,但我是 R 新手(比如 30 分钟新)并且仍然摸不着头脑。

我有五列。我想按 a 和 b 列的组合(a 是染色体,b 是基因座)对数据进行排序,然后对 sample1、sample2 和 sample3 列的值进行平均以提供文本输出。

到目前为止,我有以下几点,但我认为我的均值计算让我失望了

#Import the data as a data frame
df = read.table("mydata.txt")

#Make sure its there
summary(df)

#Make sure data is sorted by chromosome and by locus.

df = df[order(df[[1]], df[[2]]), ]
#Take the control samples and average each row for three columns excluding the first two     columns- add the per row means to the data frame

dfmns <- rowMeans( df[ , c("sample1", "sample2", "sample3")] ) 

样本数据如下:

chr leftPos strand  JWA JWB JWC JWD OE33_F
chr1    100202137   +   2   0   1   0   0
chr1    100260304   -   141 62  75  55  20
chr1    100724039   -   0   1   0   0   0

我愿意

chr      leftPos    strand  JWA JWB JWC JWD OE33_F   Means
chr1    100202137   +          2    0   1   0   0     0.6
chr1    100260304   -        141    62  75  55  20    70.6
chr1    100724039   -          0    1   0   0   0     0.2

我认为代码在 order 函数中失败,因为我可能没有正确引用列?

【问题讨论】:

  • 是什么让您认为计算错误?我们没有输入数据,因此我们不知道这些代码正在重新调整什么或您期望什么。
  • 为了从我们那里获得更好的帮助(正如@MrFlick 开始说的那样),请阅读有关制作reproducible example 的内容,包括为我们提供一个有代表性的数据集和输出,表明您想要什么以及您是什么得到。
  • chr leftPos strand JWA JWB JWC JWD OE33_F chr1 100202137 + 2 0 1 0 0 chr1 100260304 - 141 62 75 55 20 chr1 100724039 - 0 1 0 0 0
  • 前 3 个样本是 JWA JWB JWC 是吗?如何从 c(2,0,1) 中得到 2 的平均值?
  • @user3632206。您发布的示例和代码不同。目前尚不清楚哪些列是“sample1:sample3”。我尝试使用列的组合,但无法获得“平均值”输出。

标签: r


【解决方案1】:

您可能还使用了一些character 列来计算rowMeans。在您的示例中,如果您想删除字符列/未选择的列(这里它们位于位置 1、2 和 3)

df$Means <- rowMeans(df[,-(1:3)]) #1:3 refers to the columns `chr` to `strand`
 df
#   chr   leftPos strand JWA JWB JWC JWD OE33_F Means
#1 chr1 100202137      +   2   0   1   0      0   0.6
#2 chr1 100260304      - 141  62  75  55     20  70.6
#3 chr1 100724039      -   0   1   0   0      0   0.2

如果您只有有限数量的列来执行平均值:

rowMeans(df[,c("JWA", "JWB", "JWC","JWD", "OE33_F")])
#[1]  0.6 70.6  0.2

或者

rowMeans(df[grep("^JW|^OE", colnames(df))])
#[1]  0.6 70.6  0.2

【讨论】:

  • 优秀。正是我想要的。谢谢
  • 如果我想指定对哪些列执行均值呢?
  • @user3632206。您希望在实际数据集中对多少列执行均值?
  • 好吧,我想我明白了,我只是指定了我想在上面运行平均值的列索引,例如获取第 4 列和第 5 列的平均值,它将是 df$Means
  • rowMeans(df[,c(4,6)])
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多