缘由

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

碎碎念

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

代码

  1. 数据有多个来源或者不同的格式,如何选择可能存在的列名?
library(dplyr)
 
# 创建模拟数据框
df <- data.frame(
    a = 1:5,
    b = 6:10,
    c = 11:15,
    stringsAsFactors = FALSE
)
 
print(df)
 
# 使用one_of()选择可能存在的列 尝试选择列"a"和"d",但"d"不存在于数据框中
selected_columns <- df %>%
    select(one_of(c("a", "d")))
 
print(selected_columns)
  1. 如何同时统计多列的平均值和标准差?
library(dplyr)
 
# 创建模拟数据框 mpg
mpg <- data.frame(
    model = c("Car1", "Car2", "Car3", "Car4", "Car5"),
    height = c(1.5, 1.6, NA, 1.7, 1.8),  # 包含缺失值
    width = c(1.8, NA, 1.9, 2.0, 2.1)    # 包含缺失值
)
 
print(mpg)
 
# 使用 summarise() 和 across() 计算统计量
summary_mpg <- mpg %>%
    summarise(across(c(height, width), list(mean = mean, sd = sd), na.rm = TRUE, .names = "{col}_{fn}"))
 
# 打印汇总后的数据框
print("汇总后的数据框:")
print(summary_mpg)
  1. 如何选择多列,并对这些列应用自定义函数?
library(dplyr)
 
# 创建模拟数据框 df
df <- data.frame(
    id = 1:5,
    height_cm = c(150, 160, 170, NA, 180),
    width_cm = c(50, NA, 60, 70, 80),
    length_cm = c(100, 110, 120, 130, 140)  # 不包含 "height" 或 "width",因此不会被修改
)
 
print(df)
 
# 定义一个自定义函数:平方根变换,处理NA值
sqrt_transform <- function(x) {
    ifelse(is.na(x), NA, sqrt(x))  # 如果是NA值,保持为NA,否则计算平方根
}
 
# 使用 mutate(across()) 选择包含 "height" 或 "width" 的列,并应用自定义函数
df_modified <- df %>%
    mutate(across(.cols = contains("height") | contains("width"), sqrt_transform))
 
# 打印修改后的数据框
print(df_modified)
  1. 如何快速合并多个data.frame ?
# 创建示例数据框 df1
df1 <- data.frame(
  Description = c("Apple", "Banana", "Cherry"),
  Value1 = c(10, 20, 30)
)
 
# 创建示例数据框 df2
df2 <- data.frame(
  Description = c("Apple", "Banana", "Date"),
  Value2 = c(100, 200, 300)
)
 
# 创建示例数据框 df3
df3 <- data.frame(
  Description = c("Apple", "Cherry", "Date"),
  Value3 = c(1000, 2000, 3000)
)
 
# 将这些数据框放入一个列表
df_list <- list(df1, df2, df3)
 
# 使用 Reduce 和 merge 来将这些数据框按 Description 列合并
merged_df <- Reduce(function(x, y) merge(x, y, by = "Description", all = TRUE), df_list)
 
# 打印合并后的数据框
print(merged_df)
 
  1. 如何求多个文件的差集 并集和交集?
# 模拟文件内容,假设我们有三个文件:file1, file2, file3
file1 <- c("apple", "banana", "cherry", "date")
file2 <- c("banana", "cherry", "date", "elderberry")
file3 <- c("cherry", "date", "fig", "grape")
 
# 将它们放入一个列表中,模拟读取多个文件
files <- list(file1, file2, file3)
 
# 并集操作(union)
union_set <- Reduce(union, files)
print("并集 (Union):")
print(union_set)
 
# 交集操作(intersect)
intersect_set <- Reduce(intersect, files)
print("交集 (Intersection):")
print(intersect_set)
 
# 差集操作(setdiff)
setdiff_set <- list()
for (i in 1:length(files)) {
    setdiff_set[[i]] = Reduce(setdiff, c(files[i], files[-i]))  # 对每一个文件计算与其他文件的差集 files[-i] 从列表元素中排除某个元素
}
print("差集 (Set Difference):")
print(setdiff_set)