2014-09-20 75 views
0

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

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 

回答

1

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

第一个是改变所有的因素水平。如果你有符号的载体来改变,而且他们中的符号的levels的顺序相同,它可能是最容易做的

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

第二种方式是“手动”的方式来做到这一点,如果你只想改变几个因子水平,可以使用它。在下面的代码中,行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。我喜欢它,因为它返回已更改的数据帧。

+0

我建议是与'levels'更为明确,提供了一个名为清单,或许是这样的:'水平(DF $符号)< - 列表(Stock_T = “ABCD.BO”,Styck_Y =“XYZ.BO”)' – A5C1D2H2I1M1N2O1R2T1 2014-09-22 04:03:18

1

它不会更改,因为新值不是该列中已命名的因素之一。您可以使用:

stringsAsFactors = FALSE in read.csv command 

或转换符号列字符:

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

那么你的命令会工作。

2

在这里你去,试试这个:

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