我有一个包含AA、AB和BB三种类型的数据帧。在此之后,还有包含不同类型的样本1000到1005。但是,有些字符串是类型BA,与类型2AB不同,因此我希望更改字符串以匹配类型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
发布于 2016-08-03 07:49:16
如果我们需要根据'Type_2‘列中的值来更改数字列值,即反转的值应该更改为'Type_2’的值,那么一个选项是apply
with 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))
发布于 2016-08-03 07:32:47
是否要将"BA“替换为"AB"?答案肯定是这样的。
dataset[ dataset== "BA" ] <- "AB"
https://stackoverflow.com/questions/38737064
复制