【问题标题】:strsplit a melted datasetstrsplit 一个融合的数据集
【发布时间】:2011-12-31 00:12:02
【问题描述】:

我正在尝试绘制大型 CSV 文件格式的基因测试结果。 CSV 中的每个 x,y 位置都是一个数字分数,其中大部分为零。我只对非零数据感兴趣。此外,每个 X 和 Y 标题的名称还有我想用来进一步对数据进行子集化的附加信息。我想做的是融合数据,用零值剥离所有行,然后对融合的数据进行字符串拆分,以提供可用于转换的额外列。但是,当我尝试对融化的数据进行字符串拆分时遇到了问题。以下是命令和一些示例数据:

test <- read.csv("~/Documents/Bioinformatics/Python_Scripts/test.csv", as.is=TRUE)
smalltest <- test[1:10, 1:4]
small.melt <- melt(smalltest)
head(smalltest)
head(small.melt)

这导致以下数据:

head(small.test)
BlastCompare Triostin_A_2 Triostin_A_1 Myxochelin_2 Myxochelin_1 
HA9WEQA05FUABT_497_TxR_K2            0            0      105          120 
G9VUOJT08JA64I_426_TxC_N3            0            0  0            0 
HA9WEQA06G2SFP_457_TxC_J4            0            0     0            0 
HA9WEQA05GCP8Q_506_TxR_J7          150          150    0            0 
HA9WEQA07HU6MW_421_TxR_P7            0            0    0            0 
G9VUOJT05FST3W_399_TxR_J4            0            0    255          240

头部(small.melt)

BlastCompare     variable value 
HA9WEQA05FUABT_497_TxR_K2Triostin_A_2     0  
G9VUOJT08JA64I_426_TxC_N3 Triostin_A_2     0 
HA9WEQA06G2SFP_457_TxC_J4 Triostin_A_2     0 
HA9WEQA05GCP8Q_506_TxR_J7 Triostin_A_2   150 
HA9WEQA07HU6MW_421_TxR_P7 Triostin_A_2     0 
G9VUOJT05FST3W_399_TxR_J4 Triostin_A_2     0

但是,当我尝试在 $variable 列上进行字符串拆分时,会得到以下结果:

small.melt$name <- sapply(strsplit(small.melt$variable, "_") , "[", 1)
Error in strsplit(small.melt$variable, "_") : non-character argument

有什么想法吗?或者如何解决这个问题?

谢谢 扎克cp

【问题讨论】:

    标签: r dataframe reshape


    【解决方案1】:

    问题在于small.melt$variable 属于factor 类,而strsplit() 需要一个字符 向量作为它的第一个参数。 (它在上面和下面的精简示例中返回的错误消息几乎可以告诉您):

    f <- as.factor(c("a_b", "a_c"))
    strsplit(f, "_")
    Error in strsplit(f, "_") : non-character argument
    

    要让strsplit() 开心,只需使用as.character() 将因子转换为字符向量:

    sapply(strsplit(as.character(small.melt$variable), "_") , "[", 1)
    #  [1] "Triostin"   "Triostin"   "Triostin"   "Triostin"   "Triostin"  
    #  [6] "Triostin"   "Triostin"   "Triostin"   "Triostin"   "Triostin"  
    # [11] "Triostin"   "Triostin"   "Myxochelin" "Myxochelin" "Myxochelin"
    # [16] "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin"
    # [21] "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin"
    

    【讨论】:

    • 感谢乔希。我的脚本顶部有一个选项(stringsAsFactors = FALSE),并且还使用 as.is=True 导入了 csv,但无论如何这些因素都会滑落。
    • 当您从 smalltestsmall.melt 时,我很确定 melt() 将列名转换为因子。
    • Melt 这样做是为了保留列的顺序,以防它们很重要。另请参阅 stringr 包,它自动将因素强制转换为字符。还有 colsplit 函数...
    猜你喜欢
    • 2020-07-05
    • 2019-11-04
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2018-01-03
    相关资源
    最近更新 更多