0

我有一个名为 VarChange 的数据框,其中包含 1005 个变量,例如:

   row.name   SamplingEvent  Year  Zenaida_macroura  . . . 1005 variables
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr

我的目标是将数据框的列名更改为名为“NewSppName”的行(最多 8 个字母代码相当于当前变量名)。这是为了不丢失 ArcMap 中的各种变量的跟踪(它将所有变量名称截断为 8 个字符)。

当我要求时,每件事看起来都不错(即 R 输出适当的 NewSppNames):

Var['NewSppName',]

但是当我使用:

colnames(VarChange) <- VarChange['NewSppName', ]

或者

colnames(VarChange) <- as.character(VarChange["NewSppName",])

我得到以下输出:

   row.names  7              Year  8            . . . 1005 variables
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr

95% 的变量确实将名称更改为 NewSppName 中的值,但有十几个更改为数字而不是 NewSppName 中存在的字符名称。

有什么理由吗?有什么解决办法吗?

4

1 回答 1

0

使用索引时,您需要使用逻辑或数字或行名之一。仅仅因为您有一个名为 'row.name' 的列不会告诉 R 将其用于索引。

VarChange <- read.table(text="   row.name   SamplingEvent  Year  Zenaida_macroura  
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr
", header=TRUE)
> as.character(VarChange["NewSppName",])
[1] "NA" "NA" "NA" "NA"

因此,要么使用 '5' ,要么构造正确的逻辑向量VarChange$row.names=="NewSppName"。您可能会得到不同的结果,因为您的工作区中有一些不同的对象被命名为“NewSppName”。您还需要通过 sapply()-ing 安全地转换为字符as.character,因为它们是具有不同级别的因素,并且全局 as.character(.) 不会成功:

> sapply(VarChange[VarChange$row.name=="NewSppName",] ,as.character)
        row.name    SamplingEvent             Year Zenaida_macroura 
    "NewSppName"      "SampEvent"           "Year"       "Zenamacr" 

> colnames(VarChange) <- sapply(VarChange[5,] ,as.character)
> VarChange
  NewSppName     SampEvent Year         Zenamacr
1      12367           S41 2005                0
2      12369           S42 2005                X
3      12370           S43 2005                4
4 OldSppName SamplingEvent Year Zenaida_macroura
5 NewSppName     SampEvent Year         Zenamacr
于 2012-09-26T01:55:37.523 回答