首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名R中列中的所有值

重命名R中列中的所有值
EN

Stack Overflow用户
提问于 2020-01-28 17:23:34
回答 2查看 5.3K关注 0票数 0

我有一个数据集df,其值如下:

代码语言:javascript
复制
ID                                        Duration   
abcdefghijklmnopqrstuvwxyz                1 sec
abcdefghijklmnopqrstuvwxyz1               0 sec
abcdefghijklmnopqrstuvwxyz2               0 sec                    
abcdefghijklmnopqrstuvwxyz3               1 sec
abcdefghijklmnopqrstuvwxyz4               0 sec

目标:我正在绘制一个直方图,这个值太长了。我希望将列ID中的值转换为较短的值,如:

代码语言:javascript
复制
ID                                        Duration   
A                                         1 sec
B                                         0 sec
C                                         0 sec                    
D                                         1 sec
E                                         0 sec

要做到这一点,我必须指定并写出行中的每个值吗?(他们有100人)

代码语言:javascript
复制
rename.values(df, abcdefghijklmnopqrstuvwxyz="A")...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-28 17:26:48

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

代码语言:javascript
复制
df$ID <- paste0("A",1:nrow(df))

替代方案:使用

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

代码语言:javascript
复制
df$ID <- gsub("abcdefghijklmnopqrstuvwxyz","A",df$ID)

gsub的优点是,如果您多次重复ID,它将保留这种重复,因为它将只替换ID字符串的第一部分。

示例

代码语言:javascript
复制
a <- paste0(letters[1:26], collapse = "")
df <- data.frame(ID = paste0(a,1:100),
                value = rnorm(100))

因此,您的df看起来是:

代码语言:javascript
复制
  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的字符串:

代码语言:javascript
复制
df$ID <- paste0("A",1:100)

或使用gsub

代码语言:javascript
复制
df$ID <- gsub("abcdefghijklmnopqrstuvwxyz","A",df$ID)

你得到的是:

代码语言:javascript
复制
  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列。

票数 3
EN

Stack Overflow用户

发布于 2020-01-28 17:31:25

您可以简单地创建一个新的ID列,这将解决您的问题,并保留您的原始ID(假设没有重复的ID)。

代码语言:javascript
复制
df <- df %>%
   mutate(ID2 = 1:nrow(df)) %>%
   select(ID2, Duration)        #  OR       select(-ID) : deselects ID, keeps everything else.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59954035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档