首页 > 解决方案 > 重命名R中一列中的所有值

问题描述

我有一个数据集 df,具有以下值:

ID                                        Duration   
abcdefghijklmnopqrstuvwxyz                1 sec
abcdefghijklmnopqrstuvwxyz1               0 sec
abcdefghijklmnopqrstuvwxyz2               0 sec                    
abcdefghijklmnopqrstuvwxyz3               1 sec
abcdefghijklmnopqrstuvwxyz4               0 sec

目标:我正在绘制直方图,但值太长了。我想将列 ID 中的值转换为较短的值,例如:

ID                                        Duration   
A                                         1 sec
B                                         0 sec
C                                         0 sec                    
D                                         1 sec
E                                         0 sec

为此,我是否必须指定并写出行中的每个值?(有100个)

rename.values(df, abcdefghijklmnopqrstuvwxyz="A")...

标签: rdataframedplyr

解决方案


如果不使用dplyr,如果您想将列 ID 中的所有值重命名为较短的 ID(并假设您的所有 ID 都不同),您可以编写:

df$ID <- paste0("A",1:nrow(df))

替代方案:使用gsub

或者,如果您希望替换一个很长的模式(例如 abcdef....),您可以使用gsub

df$ID <- gsub("abcdefghijklmnopqrstuvwxyz","A",df$ID)

这样做的好处gsub是,如果您有一个 ID 重复多次,它将保留此重复,因为它只会替换 ID 字符串的第一部分。

例子

a <- paste0(letters[1:26], collapse = "")
df <- data.frame(ID = paste0(a,1:100),
                value = rnorm(100))

所以,你df看起来像:

  ID      value
1 A1  2.6977546
2 A2  1.9434639
3 A3  0.4191808
4 A4 -0.1545246
5 A5  2.0112518
6 A6  0.5877203
...

ID现在,如果您用以下命令替换字符串:

df$ID <- paste0("A",1:100)

或与gsub

df$ID <- gsub("abcdefghijklmnopqrstuvwxyz","A",df$ID)

你得到:

  ID      value
1 A1  2.6977546
2 A2  1.9434639
3 A3  0.4191808
4 A4 -0.1545246
5 A5  2.0112518
6 A6  0.5877203
...

因此,您以相同的顺序保存了所有列和值,您只需修改 ID 列。


推荐阅读