在数据框中为字符串添加数字

时间:2015-07-19 11:20:04

标签: r

如何为数据框中的字符串分配数字,如下所示?

我尝试过这样的事情,但不正确:row.names(d) <- paste(d[,1],1:96,sep="")

> head(d,10)
   condition
1          T
2          N
3          T
4          N
5          T
6          N
7          T
8          N
9          T
10         N

输出:

   condition
T1          T
N1          N
T2          T
N2          N
T3          T
N3          N
T4          T
N4          N
T5          T
N5          N

1 个答案:

答案 0 :(得分:3)

使用行名通常是一种不好的做法,因为它们在您开始操作数据时就变得毫无意义。不过,您可以使用

实现所需的输出
row.names(d) <- with(d, ave(as.character(condition), condition, FUN = function(x) paste0(x, seq(length(x)))))
d
#    condition
# T1         T
# N1         N
# T2         T
# N2         N
# T3         T
# N3         N
# T4         T
# N4         N
# T5         T
# N5         N  

虽然我推荐像

这样的东西
d$res <- with(d, ave(as.character(condition), condition, FUN = function(x) paste0(x, seq(length(x)))))

其他一些替代方案可能是

library(data.table) 
setDT(d)[, res := paste0(condition, seq_len(.N)), by = condition]

或(不要在data.table对象上运行

library(dplyr)  
library(magrittr)
d %<>% 
  group_by(condition) %>% 
  mutate(res = paste0(condition, row_number()))

我可能会留下一些选项让其他人知道。