我有一个数据集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")...发布于 2020-01-28 17:26:48
如果不使用dplyr,如果要将列ID中的所有值重命名为较短的ID (并且假设所有ID都不同),则可以编写:
df$ID <- paste0("A",1:nrow(df))替代方案:使用
或者,如果您想替换一个很长的模式(例如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列。
发布于 2020-01-28 17:31:25
您可以简单地创建一个新的ID列,这将解决您的问题,并保留您的原始ID(假设没有重复的ID)。
df <- df %>%
mutate(ID2 = 1:nrow(df)) %>%
select(ID2, Duration) # OR select(-ID) : deselects ID, keeps everything else.https://stackoverflow.com/questions/59954035
复制相似问题