我有一個大資料框(70k 行 x 200k 列),其中一些行名有破折號,一些有句點,還有一些兩者都有,如下所示:
df <- data.frame(cell1 = c(0,1,2,3,4,5,6), cell2 = c(0,1,2,3,4,5,6))
rownames(df) <- c("CMP21-97G8.1", "RP11-34P13.7", "HLA.A", "HLA-A", "HLA-E", "HLA.E", "RP11.442N24--B.1")
cell1 cell2
CMP21-97G8.1 0 0
RP11-34P13.7 1 1
HLA.A 2 2
HLA-A 3 3
HLA-E 4 4
HLA.E 5 5
RP11.442N24--B.1 6 6
我想創建三個 df 子組,其中一個子組的行名只有句點(HLA.A
/ HLA.E
),一個只有破折號的行名(HLA-A
/ HLA-E
),一個有兩個(CMP21-97G8.1
/ RP11-34P13.7
/ RP11.442N24--B.1
)。像這樣的東西:
df1
cell1 cell2
CMP21-97G8.1 0 0
RP11-34P13.7 1 1
RP11.442N24--B.1 6 6
df2
cell1 cell2
HLA.A 2 2
HLA.E 5 5
df3
cell1 cell2
HLA-A 3 3
HLA-E 4 4
但是,當我嘗試查找句點和破折號時,它們似乎總是“懶惰”的,例如,它只是查看它是否有句點或破折號,并且不會區分兩者的情況。
#looking for either or. Returns all types mentioned
df <- df[grepl("[-]|[.]",rownames(df)),]
#tries to look for only containing both. Returns all types mentioned
df <- df[grepl("[^-]*-([^.] ).*",rownames(df)),]
#returns nothing
df <- df[grepl("[-]&[.]",rownames(df)),]
df <- df[grepl("[-]&&[.]",rownames(df)),]
希望這是有道理的,感謝閱讀!
uj5u.com熱心網友回復:
您可以使用以下內容獲取第一個資料幀:
df1 <- df[grepl("-[^.]*\\.|\\.[^-]*-",rownames(df)),]
輸出:
> df1
cell1 cell2
CMP21-97G8.1 0 0
RP11-34P13.7 1 1
RP11.442N24--B.1 6 6
正-[^.]*\\.|\\.[^-]*-
則運算式匹配兩個子字串,一個介于-
and.
或 between .
and的字串-
。
第二個資料幀可以通過以下方式獲得:
df2 <- df[grepl("^[^-.]*\\.[^-]*$", rownames(df)),]
在這里,^[^-.]*\.[^-]*$
匹配一個不包含連字符和至少一個點的完整字串。
查看輸出:
> df2
cell1 cell2
HLA.A 2 2
HLA.E 5 5
以下是獲取第三個資料幀:
df3 <- df[grepl("^[^-.]*-[^.]*$", rownames(df)),]
查看輸出:
> df3
cell1 cell2
HLA-A 3 3
HLA-E 4 4
在這里,^[^-.]*-[^.]*$
匹配一個不包含點且至少包含一個連字符的完整字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496089.html
上一篇:將列中的值覆寫到串列中的下一個值