缘由

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

碎碎念

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

代码

  1. 如果第一列为0如何使用第2或者第3列不为0的值去填充第一列的值?
 
#coalesce() 是 dplyr 包中的一个函数,主要用于返回多个列或向量中的第一个非缺失(非 NA)的值。
df <- tibble(
	col1 = c(0, 5, 0, 10),
	col2 = c(20, 0, 30, 0),
	col3 = c(100, 200, 300, 400)
)
 
df %>% mutate(result = coalesce(na_if(col1, 0), na_if(col2, 0), col3))
#na_if(0) 把 0 变成 NA
  1. 如何使用dplyr合并A列和B列?
 
 
library(dplyr)
 
# 创建示例数据
df <- tibble(
	first_name = c("John", "Jane", "Jim"),
	last_name = c("Doe", "Smith", "Brown"),
	age = c(25, 30, 22)
)
 
#用法1
# 使用 unite 合并名字和姓氏
df_united <- df %>%
	unite(full_name, first_name, last_name, sep = " ",remove = F)
#用法2
# 使用 paste0 合并名字和姓氏
df <- df %>%
	mutate(full_name = paste0(first_name, last_name))
# 查看结果
print(df)
 
# 查看结果
print(df_united)
 
  1. 如何根据一列中的值筛选出另一列对应位置的值?
library(dplyr)
library(stringr)
 
# 创建数据框
df <- data.frame(
	Score = c("1;0;0;1"),
	AA = c("T;S;S;T")
)
 
# 处理数据
df <- df %>%
	mutate(
		# 分割 Score 和 AA 为列表
		Score_list = str_split(Score, ";"),
		AA_list = str_split(AA, ";"),
		
		# 筛选 Score >= 0.5 的对应 AA
		Filtered_AA = map2_chr(Score_list, AA_list, function(s, a) {
			paste(a[as.numeric(s) >= 0.5], collapse = ";")  # 筛选后拼接成字符串
		})
	) %>%
	select(-Score_list, -AA_list)  # 删除中间变量
  1. 如何使用purrr包记录每个循环的来源
library(dplyr)
library(purrr)
 
# 假设的输入数据框
data <- tibble(
	SampleA = c("Filtered", "OK", "OK", "Bad"),
	SampleB = c("OK", "Filtered", "OK", "Filtered"),
	SampleC = c("Bad", "OK", "Filtered", "OK")
)
 
# 样本列
smp_cols <- c("SampleA", "SampleB", "SampleC")
 
 
#使用set_names记录来源
map_dbl(smp_cols, function(smp_col) {
	count = data %>% nrow() 
})  
 
 
map_dbl(set_names(smp_cols), function(smp_col) {
	count = data %>% nrow() 
})  
 
 
 
 
  1. 如何使用purrr包的循环函数输出为data.frame?
#使用purrr包输出为data.frame的格式
map_dfr(set_names(smp_cols), function(smp_col) {
	tibble(sample = smp_col, count = data %>% nrow() )
})