缘由
生信之路,道阻且长,记录经验,但渡有缘人。
碎碎念
及时当勉励,岁月不饶人 ——陶渊明
代码
- 如果第一列为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- 如何使用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)
- 如何根据一列中的值筛选出另一列对应位置的值?
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) # 删除中间变量- 如何使用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()
})
- 如何使用purrr包的循环函数输出为data.frame?
#使用purrr包输出为data.frame的格式
map_dfr(set_names(smp_cols), function(smp_col) {
tibble(sample = smp_col, count = data %>% nrow() )
})