1. 如何安全读取数据? 见方法2
library(data.table)
data <- "ID,Protein,Position,Modification,Score,Intensity,Confidence
1,P12345,12,Phosphorylation,0.95,12000,High
2,Q98765,24,Acetylation,0.88,,Medium
3,O75321,8,Ubiquitination,NaN,8500,Low
4,P12345,56,Methylation,NULL,9600,High
5,P13596,33,Phosphorylation,0.91,11000,"
# Using fread() with text input directly
 
#法1 默认
fread(data, na.strings = c(""))
#法2 将数据中的空格 NA NULL NaN统一读取为NA
fread(data, na.strings = c("", "NA", "NULL", "NaN"))
 
 
  1. 如何删除定量值全是NA的行?
# 创建示例数据
set.seed(123)
quant_data_select <- data.frame(
    ID = 1:10,
    var1 = c(1.2, NA, 3.4, NA, 5.6, NA, 7.8, NA, NA, NA),
    var2 = c(NA, 2.3, NA, 4.5, NA, 6.7, NA, 8.9, NA, 10.1),
    var3 = c(1.1, 2.2, NA, NA, NA, 6.6, 7.7, 8.8, NA, 10.0),
    group = letters[1:10]
)
 
# 指定定量列
quant_col <- c("var1", "var2", "var3")
 
# 原始数据
quant_data_select
 
 
#法1 baseR
quant_data_select[rowSums(is.na(quant_data_select[quant_col]))!=ncol(quant_data_select[quant_col]),]
#法2 tidy style
quant_data_select %>%filter(!if_all(all_of(quant_col), is.na))
 
  1. 如何删除对照组和处理组50%缺失值的行?
library(dplyr)
 
# 创建示例数据
quant_data <- tibble(
    Protein = c("P1", "P2", "P3", "P4", "P5"),
    Ctrl1 = c(1.2, NA, 3.4, 4.5, NA),
    Ctrl2 = c(1.3, 2.1, NA, 4.6, NA),
    Ctrl3 = c(1.1, NA, 3.5, NA, 5.5),
    Treat1 = c(1.5, 2.2, NA, NA, 5.6),
    Treat2 = c(NA, 2.3, 3.6, 4.7, 5.7),
    Treat3 = c(1.6, NA, NA, 4.8, 5.8)
)
 
# 定义组别
control_samples <- c("Ctrl1", "Ctrl2", "Ctrl3")
treat_samples <- c("Treat1", "Treat2", "Treat3")
 
exprSet <- quant_data %>%
    mutate(
        control_na = rowMeans(is.na(across(all_of(control_samples)))),
        treat_na = rowMeans(is.na(across(all_of(treat_samples))))
    ) %>%
    filter(control_na <= 0.5, treat_na <= 0.5) %>%
    select(-control_na, -treat_na)
 
  1. 如何将修饰氨基酸拆分为氨基酸和相应的位置?
# 创建示例数据
temp <- data.frame(
  ID = 1:5,
  Location = c("A123", "B456", "C789", "D101", "E112"),
  Value = c(10.2, 15.5, 8.7, 12.3, 9.1)
)
 
# 原始数据
temp
 
 
#法1 baseR
temp[c("amino_acid","position")] <- str_split_fixed(temp$Location, pattern = "", n = 2)
temp$position <- as.numeric(temp$position)
temp
 
#法2 tidy style
temp %>%
    mutate(
        amino_acid = str_sub(Location, 1, 1),
        position   = as.numeric(str_sub(Location, 2))
    ) 
    
  1. 如何查看R中的内置数据集? 并且加载相应的数据集合?
all_datasets <- data()$results[, "Item"]
print(all_datasets)
#选择其中一个并加载
data(women)