繁体   English   中英

替换 R DataFrame 中的字符串值

[英]Replacing String Values in an R DataFrame

我正在尝试用 ReShaped melt() 函数创建的数据框中的较长名称替换某个 4/5 字母代码。 但是,它不起作用。

我一开始有什么(缩短版):

       Index Fund       Value
1 2021.06.01 VDEE  0.00000000
2 2021.06.02 VDEE -0.04419429
3 2021.06.03 VDEE -0.24161782
4 2021.06.04 VDEE -0.03707800
5 2021.06.07 VDEE  0.56371383

我想最终得到什么:

       Index                                   Fund       Value
1 2021.06.01 FTSEDevelopedEuropeexUKEquityIndexFund  0.00000000
2 2021.06.02 FTSEDevelopedEuropeexUKEquityIndexFund -0.04419429
3 2021.06.03 FTSEDevelopedEuropeexUKEquityIndexFund -0.24161782
4 2021.06.04 FTSEDevelopedEuropeexUKEquityIndexFund -0.03707800
5 2021.06.07 FTSEDevelopedEuropeexUKEquityIndexFund  0.56371383

我目前的最终结果是:

       Index Fund       Value
1 2021.06.01 <NA>  0.00000000
2 2021.06.02 <NA> -0.04419429
3 2021.06.03 <NA> -0.24161782
4 2021.06.04 <NA> -0.03707800
5 2021.06.07 <NA>  0.56371383

基本上我想在数据框中用更长的字符串替换一个短代码。 但是我发现这样做的主要方法是: ReShaped[ReShaped == Fund] <- Name 但是当我这样做时,我得到以下错误: invalid factor level, NA generated 这导致我这样做 但是,当我将stringsAsFactors = FALSE参数添加到melt()函数时,我仍然会收到错误,如果我这样做ReShaped[ReShaped == Fund] <- factor(Name)

关于问题是什么或如何解决它的任何想法?

注意:我想保持数据框的相同格式,然后在 ggplot2 中绘制它。

我们可以创建一个 key/val 数据集并进行连接

library(dplyr)
 keydat <- tibble(Fund = c("VDEE"), val = c("FTSEDevelopedEuropeexUKEquityIndexFund"))
df1 <- df1 %>% 
   left_join(keydat) %>%
    mutate(Fund = coalesce(val, Fund), .keep = "unused")

-输出

df1
  Index                                   Fund       Value
1 2021.06.01 FTSEDevelopedEuropeexUKEquityIndexFund  0.00000000
2 2021.06.02 FTSEDevelopedEuropeexUKEquityIndexFund -0.04419429
3 2021.06.03 FTSEDevelopedEuropeexUKEquityIndexFund -0.24161782
4 2021.06.04 FTSEDevelopedEuropeexUKEquityIndexFund -0.03707800
5 2021.06.07 FTSEDevelopedEuropeexUKEquityIndexFund  0.56371383

数据

df1 <- structure(list(Index = c("2021.06.01", "2021.06.02", "2021.06.03", 
"2021.06.04", "2021.06.07"), Fund = c("VDEE", "VDEE", "VDEE", 
"VDEE", "VDEE"), Value = c(0, -0.04419429, -0.24161782, -0.037078, 
0.56371383)), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM