0

私はテーブルを持っています、開始は以下です:

                    Control_H1455_121005_4     Case_X1456_121005_1     Case_V1457_121005_7      Control_K1461_121005_2
ENSG00000419.8                     0                    0                    14                    3
ENSG00000457.8                     2                    0                    1                     0
ENSG00000460.11                    18                   3                    16                    6
ENSG00000938.7                     0                    0                    0                     0      

更新しました:

  1. まず、colnames を変更します。2 番目のアンダースコアの前の部分だけが重要なので、たとえば Control_H1455_121005_4 では、Control_H1455 だけに短縮したいと考えています。これまでの私のコードは次のとおりです。

    gsub("^.*?_","_","Case_H1455_121005_4")
    

    しかし、これは を返します"_H1455_121005_4"。残しておきたい部分は実はCase_H1455. したがって、 2番目のアンダースコアまですべての文字を維持したいだけです。

    更新: (2) の場合、次のコードがあります。

    #separating data into Control & Case groups
    data_con=data[which(substring(names(data),2,2) %in% c("o"))]
    data_case=data[which(substring(names(data),2,2) %in% c("a"))]
    
    #delete rows if both case and control groups have >= 90% cols that contain 0
    #data <- data[(rowSums(data_case==0)/ncol(data_case) < 0.9 & rowSums(data_con==0)/ncol(data_con) < 0.9) , ]
    

    それは働いているようです。

  2. 各行をフィルター処理し、その行のデータをコントロールとケースの 2 つのグループに分けたいと考えています。次に、次の条件を満たしている場合にのみ、行を削除したいと思います: 列の >= 90% が Case AND Control グループの両方で 0 を含んでいる。したがって、このサンプル テーブルでは、行を削除するには、グループ Control と Case にそれぞれ 0 を含む列の >=90% が含まれている必要があります。したがって、ここでは最後の行になります。ケース グループに含まれる列の 90% 以上が 0 であるが、コントロール グループの列の 90% 未満が 0 (またはその逆) である場合、その行を保持する必要があります。これを行うには、現在次のコードがあります。

    data <- data[rowSums(data==0)/ncol(data) < 0.9, ]
    

    ただし、これはケースとコントロールによって各行を分離し、各グループを個別に見るわけではありません。

また、実際のデータにはさらに多くの列と行があり、コントロールとケースは列から列へとランダムに表示されることに注意してください。

したがって、番号(1)に関するヘルプは大歓迎です!

4

1 に答える 1