R语言那些事(五)

文摘   2024-12-08 23:10   新加坡  

 

缘由

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

碎碎念

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

代码

  1. 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. 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)
  1. 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)
  1. 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)
  1. 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)

RPython
人生苦短,R和Python。
 最新文章