使用以下命令:kable(head(table), format = "markdown")
我生成了以下table
:
|V1 |V2 |V3 |V4 |V5 |V6 |V7 |V8 |V9 |V10 |
|:--------------|:---------------------|:--------------------|:-------------------|:--------------------|:---------------------|:--------------------|:---------------------|:-------------|:----------------|
|LdBPK_271870.1 |plasma membrane: 0.52 |Golgi apparatus: 0.2 |ER: 0.09 |extracellular: 0.08 |mitochondrial: 0.07 |cytoplasmic: 0.02 |lysosomal: 0.01 |nuclear: 0.01 |peroxisomal: 0.0 |
|LdBPK_220004.1 |nuclear: 0.56 |cytoplasmic: 0.42 |mitochondrial: 0.01 |peroxisomal: 0.0 |Golgi apparatus: 0.0 |plasma membrane: 0.0 |extracellular: 0.0 |ER: 0.0 |lysosomal: 0.0 |
|LdBPK_020440.1 |cytoplasmic: 0.54 |nuclear: 0.45 |mitochondrial: 0.0 |Golgi apparatus: 0.0 |peroxisomal: 0.0 |plasma membrane: 0.0 |extracellular: 0.0 |ER: 0.0 |lysosomal: 0.0 |
|LdBPK_313080.1 |nuclear: 0.6 |cytoplasmic: 0.29 |mitochondrial: 0.06 |peroxisomal: 0.02 |Golgi apparatus: 0.01 |extracellular: 0.01 |plasma membrane: 0.01 |ER: 0.0 |lysosomal: 0.0 |
|LdBPK_201720.1 |cytoplasmic: 0.89 |nuclear: 0.06 |mitochondrial: 0.02 |peroxisomal: 0.01 |Golgi apparatus: 0.01 |extracellular: 0.0 |plasma membrane: 0.0 |ER: 0.0 |lysosomal: 0.0 |
|LdBPK_070130.1 |cytoplasmic: 0.61 |nuclear: 0.32 |peroxisomal: 0.05 |mitochondrial: 0.02 |Golgi apparatus: 0.0 |plasma membrane: 0.0 |extracellular: 0.0 |ER: 0.0 |lysosomal: 0.0 |
在我的table
中,我想循环遍历每一行,并且:
例如,假设我在字符串“nuclear”之后代码将执行以下操作。
在这种情况下,考虑我的table
代码,在第一行,打印V1和V9下的字段。在第二行,代码将打印出V1和V2下的字段。在第三个它打印我,V1和V3下的字段。直到它到达我的桌子的尽头。输出将是一个包含两列的表:第一列与V1相同,第二列仅包含字符串“nuclear”以及每行的值。
我无法使用方括号对数据进行子集化,因为我所追求的字符串可以位于V2到V10的任何列之下。
答案 0 :(得分:0)
这可能不是最快的方法(因为它每次迭代都会重新创建一个向量),但你可以试试这样的东西。这将打印第一列(V1)的每一行以及包含所需字符串的列。如果列没有您想要的字符串,则它不会打印出V1值(但您没有表明这是一个问题)。如果您事先知道所需的字符串只会出现在一列中,您可以通过初始化"相关的"来加速此循环。矢量为长度1,然后输入列值。
for(row in 1:nrow(table)) {
relevant = c()
for(col in 1:ncol(table)) {
if(grepl("your_string", table[row, col])) {
relevant <- c(relevant, col)
}
}
if(length(relevant) > 0) {
print(paste(table[row, 1], table[row, relevant]))
}
}