在R中的数据框架中的某些行中指定的具有相同字符的行

时间:2015-11-11 11:18:55

标签: r dataframe

我在特定行中有一个具有相同字符的数据框:

a    1
a    3
a    7
b    4
b    8

我想改变它:

a.1    1
a.2    3
a.3    7
b.1    4
b.2    8

你知道R中的任何代码吗?

非常感谢。

3 个答案:

答案 0 :(得分:2)

您还可以使用data.table包:

library(data.table)

setDT(df)[,ix:=paste(V1,1:.N, sep='.'),V1][]
#   V1 V2  ix
#1:  a  1 a.1
#2:  a  3 a.2
#3:  a  7 a.3
#4:  b  4 b.1
#5:  b  8 b.2

数据:

df = structure(list(V1 = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("a", 
"b"), class = "factor"), V2 = c(1L, 3L, 7L, 4L, 8L)), .Names = c("V1", 
"V2"), class = "data.frame", row.names = c(NA, -5L))

答案 1 :(得分:1)

在基地R,您可以这样做:

df$V1 <- with(df, paste(V1, ave(as.numeric(V1), V1, FUN = seq_along), sep="."))
print(df)
#   V1 V2
#1 a.1  1
#2 a.2  3
#3 a.3  7
#4 b.1  4
#5 b.2  8

答案 2 :(得分:0)

我们可以使用dplyr/tidyr。我们按'V1'分组,创建序列列('VN'),unite列'V1'和'VN',然后rename列。

library(dplyr)
library(tidyr)
df %>%
   group_by(V1) %>%
   mutate(VN = row_number()) %>% 
   unite(V1n, V1, VN, sep='.') %>%
   rename(V1=V1n) 
#   V1    V2
#  (chr) (int)
#1   a.1     1
#2   a.2     3
#3   a.3     7
#4   b.1     4
#5   b.2     8