0

我正在尝试使用子集发送与列中的特定值匹配的行,但是在识别我定义的特定标题而不是另一个标题时遇到问题。

foo.csv 是:

    ,3ZSJ_ALA_A_142,ED
    1,0,0.249
    2,10,0.379
    3,20,0.542

示例 r 代码:

    T1 = read.csv('foo.csv', header=T)
    foo <- subset(T1, 3ZSJ_ALA_A_142 == '10')
    Error: unexpected symbol in "foo <- subset(T1, 3ZSJ_ALA_A_142"
    Execution halted

我还尝试将 3ZSJ_ALA_A_142 放在括号中,然后我的输出 lis 不合适,它应该给出 10 的行,但它给出了这个:

    [1] X               X3ZSJ_ALA_A_142 ED  
    <0 rows> (or 0-length row.names)

如果我在我的 r 代码中执行 ED 而不是 3ZSJ_ALA_A_142 我得到这个 lis:

      X X3ZSJ_ALA_A_142    ED 
    2 2              10 0.379

我是在使用不合适的函数,还是我的语法都搞砸了?任何点将不胜感激,谢谢。

4

1 回答 1

2

以诸如数字开头的名称3ZSJ_ALA_A_142在语法上无效。

当您调用read.csv它时,它有一个参数check.names将检查名称的语法有效性,并在必要时进行调整(默认为check.names = TRUE)

如果您使用它来转换为语法上有效的名称,那么它将(通常)X在以数字开头的名称的开头附加一个

所以以下应该工作。

foo <- subset(T1, X3ZSJ_ALA_A_142 == '10')

如果您不想转换名称,请使用check.names = FALSE并使用backtickseg`来引用非语法名称。

 T2 = read.csv('foo.csv', header=TRUE, check.names = FALSE )
    foo <- subset(T1, `3ZSJ_ALA_A_142` == '10')

请注意使用非语法名称,因为某些函数可能无法正确处理它们。

于 2013-02-06T01:08:28.443 回答