更改数据框中的文本

时间:2011-10-03 23:05:34

标签: r

我正在处理一个数据框,我需要在其中编辑一个特定列中的条目以便于排序。导入时数据框如下所示:

     Assay    Genotype Description Sample   Operator
1    CCT6-18  C    A.Conservative  1_062911 Automatic   
2    CCT6-24  C       E.User Call  1_062911   charles
3    CCT6-25  A    A.Conservative  1_062911 Automatic

我需要将测定柱从CCT6-18更改为CCT6-018。这个“化验”在数据框中出现多次,我想一次更改所有条目。我尝试过gsub函数,但它以我不熟悉的格式返回数据。我想在数据框中恢复数据。

帮助!

3 个答案:

答案 0 :(得分:6)

df$Assay <- replace(df$Assay, df$Assay=="CCT6-18", "CCT6-018")

应该看对你。

另外,请尝试str(df)class(df$Assay)查看您的Assay专栏是哪一课。如果这是一个因素,这可能是你被绊倒的原因。如果是,请先运行df$Assay <- as.character(df$Assay)

答案 1 :(得分:4)

这取决于您是否还要更改Assay中的其他条目。一种简单的方法就是在短划线后添加0

df$Assay <- gsub('-', '-0', df$Assay)

正则表达式解决方案将是:

df$Assay <- gsub('(\\d\\d)','0\\1', df$Assay)

这将用0替换任意两位数后跟相同的两位数。你必须小心regexp,因为你必须很好地了解你的数据,以确保你不会错误地改变任何东西。例如,如果CCT62-18中有Assay作为条目,则您不希望使用此正则表达式,因为它会将62更改为062。

答案 2 :(得分:1)

我会通过替换因子水平来实现。

sam <- data.frame(assay = c("CCT6-18", "CCT6-23", "CCT6-25"),
    genetype = sample(letters, 3), operator = runif(3), sample = runif(3))
str(sam)
  'data.frame': 3 obs. of  4 variables:
   $ assay   : Factor w/ 3 levels "CCT6-18","CCT6-23",..: 1 2 3
   $ genetype: Factor w/ 3 levels "f","u","w": 1 2 3
   $ operator: num  0.595 0.912 0.76
   $ sample  : num  0.525 0.626 0.377
levels(sam$assay)[1] <- "CCT6-018"
sam
       assay genetype  operator    sample
   1 CCT6-018        f 0.5950434 0.5249502
   2  CCT6-23        u 0.9123185 0.6257186
   3  CCT6-25        w 0.7595744 0.3769029