我的数据框包含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
答案 0 :(得分:3)
如果我们需要根据' Type_2'中的值更改数字列值列,即反向值应更改为' Type_2',然后一个选项为apply
,MARGIN = 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"