删除R中的行中的最后一个数字

时间:2017-06-06 13:25:26

标签: r

这是我的data.frame的一个片段:

MC0_1_N.1   a   c
MC0_1_N.2   d   b
MC0_5_N.1   b   c
MC0_5_N.2   c   d
MC0_5_N.3   a   b
MC0_5_N.4   e   f
MC0_5_N.5   a   h
MC0_5_N.6   k   m
MC0_5_N.7   s   z
MC0_5_N.8   o   p
MC0_5_N.9   p   r
MC0_5_N.10  r   t

有没有办法删除创建data.frame后形成的最后一行数(1,2,3,4 ...)?

3 个答案:

答案 0 :(得分:0)

我们可以使用sub来匹配点(\\. -escape,因为它是一个元字符,意思是任何字符),后面跟着一个或多个数字(\\d+)({ {1}})字符串并替换为空白($

""

注意:这里我们假设它是第一列。如果是df1$col1 <- sub("\\.\\d+$", "", df1$col1) df1$col1 #[1] "MC0_1_N" "MC0_1_N" "MC0_5_N" "MC0_5_N" "MC0_5_N" "MC0_5_N" "MC0_5_N" #[8] "MC0_5_N" "MC0_5_N" "MC0_5_N" "MC0_5_N" "MC0_5_N" ,请将row.names替换为df1$col1

row.names(df1)

答案 1 :(得分:0)

对于给定的示例,这将非常好:

df1$col1 <- strtrim(df1$col1,7)

当然这只适用于

  • 列变量是字符串
  • 数据框中没有MC0_10_N.1这样的项目(请注意中间的两位数10

注意,这也会删除号码前的.

答案 2 :(得分:0)

根据您要更改的列的数据框和名称dfcol1

unlist(lapply(stringi::stri_split(str = df$col1,regex = "\\."),function(x) x[[1]]))

导致:

MC0_1_N
MC0_1_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N
MC0_5_N