如何在数据框中使用R编程更改变量值

时间:2014-09-20 05:57:54

标签: r

我正在学习R编程并导入了CSV文件。现在,我想更改符号列的变量值。如果值为" ABCD.BO"那么" Stock_T"。如果值为" XYZ.BO"那么" Stock_Y"。我尝试了下面的代码,但是,我收到一条警告消息,我检查了数据帧包含" NA"改变之后。

df$symbol[df$symbol == "ABCD.BO"] <- "Stock_T"
df$symbol[df$symbol == "XYZ.BO"] <- "Stock_Y"

Warning message:
In `[<-.factor`(`*tmp*`, df$symbol == "ABCD.BO",  :
  invalid factor level, NA generated

symbol  Date    Adj.Close
ABCD.BO 9/21/2011   201.33
ABCD.BO 9/22/2011   192.9
ABCD.BO 9/23/2011   190.47
ABCD.BO 9/26/2011   185.95
ABCD.BO 9/27/2011   190.52
ABCD.BO 9/28/2011   191.82
ABCD.BO 9/29/2011   189.49
ABCD.BO 9/30/2011   186.74
XYZ.BO  2/10/2012   334.11
XYZ.BO  2/13/2012   336.14
XYZ.BO  2/14/2012   343.74
XYZ.BO  2/15/2012   351.83
XYZ.BO  2/16/2012   352.8
XYZ.BO  2/17/2012   350
XYZ.BO  2/20/2012   350
XYZ.BO  2/21/2012   354.63
XYZ.BO  2/22/2012   333.68
XYZ.BO  2/23/2012   340.57
XYZ.BO  2/24/2012   327.9

3 个答案:

答案 0 :(得分:2)

你去,试试这个:

df$symbol <- as.character(df$symbol)
df$symbol[df$symbol == "ABCD.BO"] <-"Stock_T"

答案 1 :(得分:1)

有很多方法可以做到这一点。这是两个。

第一个是改变所有因子水平。如果您要更改的符号向量,并且它们与符号的levels的顺序相同,那么它可能最容易做到

within(df, levels(symbol) <- paste("Stock", c("T", "Y"), sep = "_"))

第二种方式是&#34;手册&#34;这样做的方法,如果您只想改变几个因子水平,可以使用它。在下面的代码中,可以删除行symbol <- as.factor(symbol),并将第一列作为字符类返回。保留它将考虑更改后的第一列。

within(df, {
    symbol <- as.character(symbol)
    symbol[symbol == "ABCD.BO"] <- "Stock_T"
    symbol[symbol == "XYZ.BO"] <- "Stock_Y"
    symbol <- as.factor(symbol) 
})

请注意,您在此处不一定需要within。我喜欢它,因为它返回更改的数据框。

答案 2 :(得分:1)

它没有改变,因为新值不是该列的命名因子之一。您可以使用:

stringsAsFactors = FALSE in read.csv command

或将符号列转换为字符:

df$symbol = as.character(df$column)

然后你的命令就可以了。