R匹配并替换数据帧中的模式

时间:2016-08-03 07:27:05

标签: r dataframe

我的数据框包含AA,AB和BB三种类型。之后,存在包含不同类型的样本1000到1005。但是,有些字符串是BA类型而不是类型2 AB,因此我想更改字符串以匹配类型2类别。

输入:

Type 1  Type 2  Type 3  1000    1001    1002    1003    1004    1005
AA      AB      BB      BB      BB      AB      BA      AA      BA
CC      AC      AA      CA      CA      CC      AA      AA      AC
EE      EF      FF      EF      FF      FE      FE      EE      FF

期望的输出:

Type 1  Type 2  Type 3  1000    1001    1002    1003    1004    1005
AA      AB      BB      BB      BB      AB      AB      AA      AB
CC      AC      AA      AC      AC      CC      AA      AA      AC
EE      EF      FF      EF      FF      EF      EF      EE      FF

2 个答案:

答案 0 :(得分:3)

如果我们需要根据' Type_2'中的值更改数字列值列,即反向值应更改为' Type_2',然后一个选项为applyMARGIN = 1(循环遍历行),将元素从4枚举到最后一个(x[4:length(x)] - 对应于数字列名称中的元素),检查第一个字符是否不等于第二个字符(substr(x1, 1, 1) != substr(x1, 2, 2))和(&)是否不是等于' Type_2' (x1 != x[2]),然后我们使用sub来反转' x1'中元素的顺序。或else返回' x1' (ifelse(...)),将输出分配回原始向量(x[4:length(x)]),返回' x',转置(t)输出并将值分配回到' df1'。

df1[] <- t(apply(df1, 1, FUN = function(x) {
               x1 <- x[4:length(x)]
               x[4:length(x)] <- ifelse(substr(x1,1,1)!= substr(x1,2,2) & x1 != x[2],
                                     sub("(.)(.)", "\\2\\1", x1), x1)
                 x}))
 df1
 #  Type_1 Type_2 Type_3 1000 1001 1002 1003 1004 1005
 #1     AA     AB     BB   BB   BB   AB   AB   AA   AB
 #2     CC     AC     AA   AC   AC   CC   AA   AA   AC
 #3     EE     EF     FF   EF   FF   EF   EF   EE   FF

数据

 df1 <-  structure(list(Type_1 = c("AA", "CC", "EE"), Type_2 = c("AB", 
 "AC", "EF"), Type_3 = c("BB", "AA", "FF"), `1000` = c("BB", "CA", 
 "EF"), `1001` = c("BB", "CA", "FF"), `1002` = c("AB", "CC", "FE"
 ), `1003` = c("BA", "AA", "FE"), `1004` = c("AA", "AA", "EE"), 
`1005` = c("BA", "AC", "FF")), .Names = c("Type_1", "Type_2", 
 "Type_3", "1000", "1001", "1002", "1003", "1004", "1005"), 
  class =  "data.frame", row.names = c(NA, -3L))

答案 1 :(得分:1)

您想将“BA”替换为“AB”吗?答案必须是那个。

 dataset[ dataset== "BA" ] <- "AB"