缘由

生信之路,道阻且长,记录经验,但渡有缘人。

碎碎念

及时当勉励,岁月不饶人 ——陶渊明

代码

  1. 如何取出括号中的内容但是不含有括号?
library(stringr)
 
# 示例数据
s <- "this is (your) book"
str_remove_all(str_extract(s, "\\((.*?)\\)"), "[()]")
str_extract(s, "(?<=\\()(.*?)(?=\\))")
 
 
#### 方法1
1. **`str_extract(s, "\\((.*?)\\)")`**:
   - `\\(` 和 `\\)`:匹配字面上的左括号 `(` 和右括号 `)`。由于括号是正则表达式中的特殊字符,因此需要使用反斜杠 `\\` 进行转义。
   - `(.*?)`:这是一个非贪婪的匹配,表示尽量少地匹配字符,直到遇到右括号 `)` 为止。`?` 是使量词 `*` 变为非贪婪(即匹配尽量少的字符),而 `.` 表示匹配任意字符。
 
   结果是:`str_extract(s, "\\((.*?)\\)")` 将返回 **整个括号内的内容,包括括号**。在此例中,返回的是 `"(your)"`。
 
1. **`str_remove_all(..., "[()]")`**:
   - `str_remove_all()` 用于去除字符中的某些模式。
   - `[()]` 是一个字符集,表示匹配所有左括号 `(` 和右括号 `)`。
   - 这一步会将 `"(your)"` 中的括号去掉,只留下 `"your"`。
 
### 方法 2:`str_extract(s, "(?<=\\()(.*?)(?=\\))")`
 
#### 解释:
1. **`(?<=\\()`**:这是一个 **正向前瞻断言**,表示匹配 **紧接在左括号 `(` 后面的内容**,但 **不包括左括号 `(`**。这个部分确保我们只匹配括号内的内容,而不包含括号。
2. **`(.*?)`**:这是非贪婪匹配,表示尽量少地匹配字符。它会匹配括号内的所有内容。
3. **`(?=\\))`**:这是一个 **正向后顾断言**,表示匹配 **紧接在右括号 `)` 前面的内容**,但 **不包括右括号 `)`**。这个部分确保我们只匹配括号内的内容,而不包含括号。
  1. 如何使用R语言WoLF PSORT亚细胞定位的结果为全名称替换? R字典替换
library(dplyr)
library(stringr)
 
df <- data.frame(location=c("nuci", "cyto", "nucl_plas"))
 
dict <- c(
    "chlo" = "chloroplast",
    "chlo_mito" = "Chloroplasts; mitochondrion",
    "cysk" = "cytoskeleton",
    "cyto" = "cytoplasm",
    "cyto_nucl" = "cytoplasm; Nucleus",
    "E.R." = "endoplasmic reticulum",
    "E.R._plas" = "endoplasmic reticulu plasma membrane",
    "cyto_E.R."="cytoplasm; endoplasmic reticulum",
    "extr" = "extracell",
    "golg" = "Golgi apparatus",
    "mito" = "mitochondrion",
    "nucl" = "Nucleus",
    "nucl_plas" = "peroxisome; plasma membrane",
    "pero" = "peroxisome",
    "plas" = "plasma membrane",
    "vacu" = "vacuole"
)
 
df %>% mutate(full_location=dplyr::recode(location, !!!dict))
 
  1. 如何使用管道符的将单元格为”—“的过滤掉?
library(dplyr)
library(stringr)
 
# 示例数据框
df <- data.frame(
    col1 = c("apple", "--", "banana", "grape"),
    col2 = c("orange", "pear", "kiwi", "--"),
    col3 = c("peach", "plum", "--", "cherry"),
    stringsAsFactors = FALSE
)
 
# 查看原始数据
print(df)
 
df %>% filter(!apply(df, 1, function(row) any(str_detect(row, "--"))))
 
  1. 如何提取文件名并且将列转为小写?
library(dplyr)
 
df <- data.frame(
  "/path/to/file1.csv" = c(1, 2, 3),
  "/path/to/file2.csv" = c(4, 5, 6)
)
 
# 使用 basename 提取文件名并替换列名
df <- df %>%
  rename_with(~ basename(.), everything())
 
# 查看替换后的数据框
print(df)
  1. 如何对于矩阵或者dataframe进行列中位数化?
mat <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, byrow = TRUE)
sweep(mat, MARGIN = 2, STATS = apply(mat, 2, median), FUN = "-")