缘由
生信之路,道阻且长,记录经验,但渡有缘人。
碎碎念
及时当勉励,岁月不饶人 ——陶渊明
代码
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)
2. 如何同时统计多列的平均值和标准差?
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)
3. 如何选择多列,并对这些列应用自定义函数?
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)
4. 如何快速合并多个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)
5. 如何求多个文件的差集 并集和交集?
# 模拟文件内容,假设我们有三个文件: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 in1:length(files)){
setdiff_set[[i]]= Reduce(setdiff,c(files[i], files[-i])) # 对每一个文件计算与其他文件的差集
}
print("差集 (Set Difference):")
print(setdiff_set)