我确信这很简单,但我是R的新手(比如新的30分钟)并且还在摸不着头脑。
我有五列。我想通过a和b列的复合(a是染色体,b是locus)对数据进行排序,然后对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
我认为代码落在了订单函数上,因为我可能没有正确引用列?
答案 0 :(得分: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