%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)
})