%left_join(band_instruments,by="name") ##全集 merge(band_members,band_instruments,by="name") ##并集 ##数据操作 ##----------------------------------------筛选行------------------------------------------------- iris[which(iris$Sepal.Length=6.7),] df %>% filter(df$gene...1>3,df$map...6>200) iris %>% filter(!is.na(Species))##删除有NA的行 iris %>% filter_all(any_vars(. == 5))##对数值执行全部筛选:此代码将保留任何值等于5的行 iris %>% filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6))filter_at( )##可以通过vars() 参数选择要对那些列进行筛选 iris %>% as_tibble() %>% filter(.,Species %in% c("setosa","virginica"))##根据2个关键词进行筛选 通过%in%进行判断 msleep %>% select("> %left_join(band_instruments,by="name") ##全集 merge(band_members,band_instruments,by="name") ##并集 ##数据操作 ##----------------------------------------筛选行------------------------------------------------- iris[which(iris$Sepal.Length=6.7),] df %>% filter(df$gene...1>3,df$map...6>200) iris %>% filter(!is.na(Species))##删除有NA的行 iris %>% filter_all(any_vars(. == 5))##对数值执行全部筛选:此代码将保留任何值等于5的行 iris %>% filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6))filter_at( )##可以通过vars() 参数选择要对那些列进行筛选 iris %>% as_tibble() %>% filter(.,Species %in% c("setosa","virginica"))##根据2个关键词进行筛选 通过%in%进行判断 msleep %>% select("> %left_join(band_instruments,by="name") ##全集 merge(band_members,band_instruments,by="name") ##并集 ##数据操作 ##----------------------------------------筛选行------------------------------------------------- iris[which(iris$Sepal.Length=6.7),] df %>% filter(df$gene...1>3,df$map...6>200) iris %>% filter(!is.na(Species))##删除有NA的行 iris %>% filter_all(any_vars(. == 5))##对数值执行全部筛选:此代码将保留任何值等于5的行 iris %>% filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6))filter_at( )##可以通过vars() 参数选择要对那些列进行筛选 iris %>% as_tibble() %>% filter(.,Species %in% c("setosa","virginica"))##根据2个关键词进行筛选 通过%in%进行判断 msleep %>% select(">
library(tidyverse)
library(readxl)
files=list.files("D:/",pattern = "xlsx",full.names = T,recursive = T)
read_excel()
##---------------------------------------批量读取文件---------------------------------------
map_dfr(files,read_xlsx) ##按照列合并
map_dfc()##按照行合并
##----------------------------------------数据连接----------------------------------------
band_members
band_instruments
band_members%>%left_join(band_instruments,by="name") ##全集
merge(band_members,band_instruments,by="name")  ##并集
##数据操作
##----------------------------------------筛选行-------------------------------------------------
iris[which(iris$Sepal.Length=6.7),]
df %>% filter(df$gene...1>3,df$map...6>200)
iris %>% filter(!is.na(Species))##删除有NA的行
iris %>% filter_all(any_vars(. == 5))##对数值执行全部筛选:此代码将保留任何值等于5的行
iris %>% 
  filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6))filter_at( )##可以通过vars() 参数选择要对那些列进行筛选
iris %>% as_tibble() %>% 
  filter(.,Species %in% c("setosa","virginica"))##根据2个关键词进行筛选 通过%in%进行判断
msleep %>% 
  select(name:order, sleep_total:sleep_rem) %>% 
  filter_if(is.character, any_vars(is.na(.))) ##这段代码首先对列的类型进行判断,再在字符列中筛选NA
iris %>% as_tibble() %>%
  rowwise() %>%
  mutate(max = max(across(where(is.numeric)))) ##按行求最大值
iris %>%  as_tibble() %>% select(-Species) %>%
  mutate(.,n=rowSums(. > 3)) ##统计某值出现次数
iris %>% select_if(is.numeric) %>% select_if(~.>4)##筛选列大于2的
df %>% select_if(is.numeric) %>% select_if(~mean(.,)>2) ##筛选列平均值大于2的
##starts_with(): 以某前缀开头的列名;
## ends_with(): 以某后缀结尾的列名;
##  contains(): 包含某字符串的列名;
##  matches(): 匹配正则表达式的列名;
##  num_range(): 匹配数值范围的列名,如 num_range("x", 1:3) 匹配 x1, x2, x3。
##  where(): 应用一个函数到所有列,选择返回结果为 TRUE 的列,比如与 is.numeric 等函数连用。
##  select_if: 通过条件判断选择列。

df %>% slice_max(gene...1,n=2)
df %>% slice_sample(n=3) 
df %>% slice_sample(prop = 0.2)
##----------------------------------------排序行-------------------------------------------------
df %>% arrange(map...2)
##----------------------------------------选择列-------------------------------------------------
df %>% select(contains("gene")) ##选择包含gene的列
iris %>% select_if(is.numeric)##选择有数字的一列
msleep %>% select_if(~!is.numeric(.))##取反
iris %>% select(starts_with('s'))##选择以s开始的列
df %>% relocate(map...2,.before = gene...1) ##修改顺序,map放在gene之前
df %>% relocate(gene...1,.after = map...2) ##gene放在map之后
##修改列
df %>% 
    mutate(sum=map...2+map...4+map...6,rank=min_rank(sum)) %>%  
  arrange(rank) ##min_rank 当两个分数相同时选择小的名词
##分组汇总
df %>% group_by(map...2) %>% summarise(avg_map=mean(gene...1))
df %>% group_by(map...2,map...4) %>% summarise(avg_map=mean(gene...1))
##长宽数据转换
##                     species   GT  PL  CE   GH   AA CBM
1    Lichenomphalia_hudsoniana_  214   8  34  286   60  62
2               Laccariabicolor  144   7  32  225   43  39
3             BoletusedulisBED1  178   4  35  246   51  37
4           Tricholomamatsutake  153   8  32  219   64  48
5             Paxillusinvolutus  157   7  57  267   43  46
6              Pilodermacroceum  153  12  40  249   82  44
7  Blumeriagraminisf.sp.tritici  125   3  16  165   21  37
8         BotrytiscinereaB05.10  268  15  80  506  108 111
9             Fusariumoxysporum  256  31 101  726  163 146
10            Pucciniatriticina  190   9  42  258   49  44
11               Ustilagomaydis  148   6  29  206   41  34
12            Agaricusbisporus? 2118 159 516 4426 1173 912
13              Lentinulaedodes  158  12  38  333   84  81
14         Volvariellavolvacea?  142  28  43  311   95  95
15             Pleurotuseryngii  153  33  37  318  106  93
gather(df6,type,value,GT:CBM) ##宽变长
gd1_wide<-spread(combined_data,Var1,Freq)##长变宽
df %>% count(map...2)
df %>% count(map...2) %>% pivot_wider(names_from = map...2,values_from = n) -> df2
spread(df,value =不变 ,key =变 )

##for loop
a <- df$Eu
b <- df$At
for (i in 1:length(a)) { print(a[i])} ->c

a <- c('This','is','my','dad')
print(a)
for (i in a) {print(i)} ##i在c集合中
for (i in 1:length(a)) 
  {print(a[i])}  ##i在1:4数字中,优势在于只定义范围,而不是从具体数据中定义,这样我们可以同时应用多个数

for (i in length(mt1$mpg)) {
  if(mt1$`mean(mt$mpg)`[i]>mt1$mpg[i]){
    mt1$new[i] <- ">"
  }else{
  mt1$new[i] <- "<"
  }
  }
##for循环输出不同的结果
output <- matrix(NA,n,n)
output <- vector("double", length(i))
for (i in 0:9) {PPdata.makers %>% filter(cluster==i) %>% dplyr::select(gene)->output[i]}
##列表转换数据框
df <- as.data.frame(sapply(output, "[", i = 1:max(sapply(output, length))))
##根据映射关系替换 ##sub()和gsub()的区别在于,前者只替换第一次匹配的字符串,而后者会替换掉所有匹配的字符串。

for (i in 1:nrow(df1)) {
  my$gene_id <- sub(df1$sd[i],df1$gene_id[i],my$gene_id)
                    } ##df1$sd[i]第一列,df1$gene_id[i]第二列
##删除全是缺失值的列
select(df,where(~!all(is.na(.))))
##替换字符
go[] <- lapply(go, function(x) gsub("\\\\|", ",", x))##|替换成逗号
df6[,2]<-gsub("ko:","",df6[,2]) ##ko:被替换
##替换NA值,或替换0为NA
df[df=="#N/A"] <- NA
##替换大小写
str_to_upper(vector)
str_to_lower(vector)
##字符识别
data.frame$vector <- str_detect(data.frame$vector1,"asa")##返回因子结果,逻辑值
str_which(data.frame$vector,"asa",negate = T) ##没匹配上的
str_which(data.frame$vector,"asa",negate = F) ##匹配上的
data.frame[str_which(data.frame$vector,"asa",negate = F),]##匹配上的
##正则表达式(半智能)
library("inferregex")
char <- "基因名"
infer_regex(char)$regex
##排序
sorted_df <- data[order(data$X3, decreasing = TRUE), ]##倒序
##替换非数值
# 将数据集中的 NA 替换为实际的 NA 值
df[is.na(df)] <- NA

# 将数据集中的 NaN 替换为实际的 NA 值
df[is.nan(df)] <- NA

# 将数据集中的 Inf 替换为实际的 NA 值
df[is.infinite(df)] <- NA
# 创建数据框列表
data_list <- list(data1, data2, data3, data4, data5, data6)

# 使用lapply函数逐个处理数据框
result <- lapply(data_list, function(df) {
  # 计算pvalue列的log10值
  df$log10_pvalue <- log10(df$pvalue)
  return(df)
})

##特异性基因
# 读取数据
df <- read.table("your_file.csv", header = TRUE, sep = "\\t")

# 创建一个空向量用于存储结果
result <- character(nrow(df))  # 设置结果向量的长度与数据框的行数相同

# 循环遍历每一行
for (i in 1:nrow(df)) {
  # 初始化标志变量
  flag <- FALSE
  
  # 判断条件:如果当前行只有一个大于0的值,则将该值所在的列名添加到结果向量中
  for (j in 1:ncol(df)) {
    if (df[i, j] > 0 && sum(df[i, -j] == 0) == (ncol(df) - 1)) {
      result[i] <- colnames(df)[j]
      flag <- TRUE
      break
    }
  }
  
  # 如果没有符合条件的列,则输出"no"
  if (!flag) {
    result[i] <- "no"
  }
}

# 将结果添加为原始数据框的新列
df$new_column <- result

# 输出结果
print(df)

##对每行进行T.test,并返回数值
t_p_values <- apply(Tentative_exp, 1, function(row_data) {
  group1 <- row_data[1:18]  # 前 18 列数据
  group2 <- row_data[19:30] # 后 12 列数据
  
  # 执行 t 检验
  test_result <- t.test(group1, group2, paired = TRUE) ##如果两组样本量一致,就是 paired = TRUE,否则就是F
  
  # 返回 p 值
  return(test_result$p.value)
})
##对每行进行wilcox.test,并返回数值
p_values <- apply(Tentative_exp, 1,function(as) {
  
  wilcox_result <- wilcox.test(as[1:18], as[19:30])
  return(wilcox_result$p.value)
  
})