如何拆分出包含Cohort与列名的独立DataFrame?
解决方法
方法一:使用tidyverse工具(推荐)
利用tidyr的pivot_longer函数可以更直观地完成宽格式到长格式的转换,直接得到你需要的结构:
library(tidyverse) # 提取Cohort行、转换格式并筛选目标样本 cohort_df <- data %>% filter(symbol == "Cohort") %>% pivot_longer(cols = -symbol, names_to = "symbol", values_to = "Cohort") %>% select(symbol, Cohort) %>% filter(symbol %in% c("sample1", "sample2"))
运行后得到的cohort_df就是你期望的结果:
| symbol | Cohort |
|---|---|
| sample1 | 0 |
| sample2 | 1 |
方法二:基础R实现
如果不想加载额外包,用基础R也能完成:
# 提取Cohort行,排除symbol列后转置 cohort_t <- t(data[data$symbol == "Cohort", -1]) # 转换为数据框并设置列名 cohort_df <- as.data.frame(cohort_t, stringsAsFactors = FALSE) colnames(cohort_df) <- "Cohort" # 添加样本名作为symbol列,调整列顺序 cohort_df$symbol <- rownames(cohort_df) cohort_df <- cohort_df[, c("symbol", "Cohort")] # 筛选需要的样本并重置行名 cohort_df <- cohort_df[cohort_df$symbol %in% c("sample1", "sample2"), ] rownames(cohort_df) <- NULL
原代码问题说明
你之前的代码把包含symbol列的整行转置了,导致结果里多了symbol | Cohort这一行,且默认列名为V1。核心问题是转置时没有排除symbol列,同时转置后没有正确设置列名和过滤冗余行。
内容的提问来源于stack exchange,提问作者Ankita
相关产品推荐
相关产品推荐

