【发布时间】:2020-01-05 03:46:57
【问题描述】:
我有一个如下形式的data.frame:
> set.seed(1)
> myp <- paste0('P', sort(sample(1:15, 10)))
> mydf <- data.frame(param=c(paste0(myp, 'B'), paste0(myp, 'R'), paste0(myp, 'max'), paste0(myp, 'min')),
+ value1=NA, value2=NA, value3=NA)
> rownames(mydf) <- mydf$param
> mydf$param <- NULL
> mydf
value1 value2 value3
P1B NA NA NA
P3B NA NA NA
P4B NA NA NA
P5B NA NA NA
P6B NA NA NA
P8B NA NA NA
P9B NA NA NA
P10B NA NA NA
P11B NA NA NA
P14B NA NA NA
P1R NA NA NA
P3R NA NA NA
P4R NA NA NA
P5R NA NA NA
P6R NA NA NA
P8R NA NA NA
P9R NA NA NA
P10R NA NA NA
P11R NA NA NA
P14R NA NA NA
P1max NA NA NA
P3max NA NA NA
P4max NA NA NA
P5max NA NA NA
P6max NA NA NA
P8max NA NA NA
P9max NA NA NA
P10max NA NA NA
P11max NA NA NA
P14max NA NA NA
P1min NA NA NA
P3min NA NA NA
P4min NA NA NA
P5min NA NA NA
P6min NA NA NA
P8min NA NA NA
P9min NA NA NA
P10min NA NA NA
P11min NA NA NA
P14min NA NA NA
我想更新行的名称,为此我有一个如下所示的转换表:
> conv.df <- data.frame(name=myp, new.name=paste0('P', 1:10))
> conv.df
name new.name
1 P1 P1
2 P3 P2
3 P4 P3
4 P5 P4
5 P6 P5
6 P8 P6
7 P9 P7
8 P10 P8
9 P11 P9
10 P14 P10
我唯一想做的就是更新mydf 中的行名,使其反映转换表conv.df 中的new.names。
这看起来很简单,但我无法理解它...我会尝试regular expression 方法,我唯一的问题是我不能 100% 确定我只会遇到rownames 形式的@ 987654330@、PnR、Pnmax、Pnmin... 我想要一个适用于任何PnX 实例的解决方案(它始终是Pn,后跟[:alpha:])
【问题讨论】:
-
我认为一个无聊的旧循环应该这样做 - 例如:stackoverflow.com/questions/55564763/… 或 stackoverflow.com/questions/26171318/…
标签: r regex dataframe substitution