如何为数据框中的字符串分配数字,如下所示?
我尝试过这样的事情,但不正确: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
答案 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()))
我可能会留下一些选项让其他人知道。