我目前正在運行一個代碼,生成一個帶有不同細胞型別的特定基因串列的熱圖。每個基因都歸入一個特定的類別(A、B、C 等)。在我的熱圖函式(pheatmap 包)中,我可以將“中斷”與一個數字向量指定必須進行中斷的行。
但是,我希望該代碼靈活并與修改后的基因串列/表一起使用。所以我想創建一個向量來指定改變因素的“位置”。這是一個虛擬示例:
df <- data.frame("Gene ID" = rep(paste0("Gene",1:10),1),
"Category" = c("A", "B", "B", "D", "D", "D", "D", "E", "E", "H" ))
df
#which give
#Gene.ID Category
#1 Gene1 A
#2 Gene2 B
#3 Gene3 B
#4 Gene4 D
#5 Gene5 D
#6 Gene6 D
#7 Gene7 D
#8 Gene8 E
#9 Gene9 E
#10 Gene10 H
我的想法是按字母順序排列/排列所有內容(在我的示例中已經完成)并通過 table() 函式提取出現次數:
table(factor(df$Category))
# Which give:
#A B D E H
#1 2 4 2 1
我現在想做的事
是創建一個向量,將每個數字與前一個數字“相加”,這樣我就可以有一個向量來指示因子變化發生的位置。所以輸出將是:
# "1", "3", "7", "9", "10"
表明在第 1 行、第 3 行、第 7 行、第 9 行和“第 10 行”(這是熱圖的結尾)之后應該發生中斷。我怎樣才能做到這一點?
另外,以防萬一,有沒有更好的方法來做到這一點?
提前致謝
uj5u.com熱心網友回復:
我認為你需要cumsum:
cumsum(table(df$Category))
# A B D E H
# 1 3 7 9 10
這假設它Category是完美排序的,這導致名稱的順序(上面的A,B等)與原始資料中的順序相同。
uj5u.com熱心網友回復:
另一種解決方案可能更靈活,因為它不需要在資料中對值進行排序,它是使用rle:
cumsum(rle(df$Category)$lengths)
#[1] 1 3 7 9 10
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529089.html
標籤:r向量水平
上一篇:包含和替代
下一篇:如何重定向網址?
