我正在学习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
答案 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)
然后你的命令就可以了。