2015-07-19 62 views
2

如何将数字指定给数据框中的字符串,如下所示?将数字添加到数据框中的字符串

我想是这样的,但其不正确: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 
+4

许多可能的方法。对于基数R,它可能是'with(d,ave(as.character(condition),condition,FUN = function(x)paste0(x,seq(length(x)))))'。用“data.table”:'library(data.table); setDT(d)[,res:= paste0(condition,seq_len(.N)),by = condition]',用“dplyr”:'library(dplyr); d%>%group_by(condition)%>%mutate(res = paste0(condition,row_number()))'等等等等... –

回答

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] 

或(不要运行该a data.table object)

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

可能有一些选项我会留给其他人弄清楚。