我正在处理一些编码为a-b
的因素,有些则编码为b-a
。两者都保存为我的用例。如何将这些因素更改为a-b
以使它们保持一致。
我可以使用if-else
语句执行此操作,但我想知道是否有一种有效的方法。
这
Id Col1
101 a-b-c-d
102 a-c-d
103 a-b
104 a-b
105 b-a
106 b-a
107 a-c-b
预期结果
Id Col1
101 a-b-c-d
102 a-c-d
103 a-b
104 a-b
105 a-b
106 a-b
107 a-c-b
答案 0 :(得分:1)
在separate_rows
paste
将“Col1”拆分为sort
library(dplyr)
library(tidyr)
df1 %>%
separate_rows(Col1) %>%
group_by(Id) %>%
summarise(Col1 = paste(sort(Col1), collapse='-'))
答案 1 :(得分:1)
代码可能性稍差,但使用基本功能
df1$Col2 <- factor(sapply(as.character(df1$Col1), function(x) paste(sort(unlist(strsplit(x, "-"))), collapse = "-")))
> df1
Id Col1 Col2
1 101 a-b-c-d a-b-c-d
2 102 a-c-d a-c-d
3 103 a-b a-b
4 104 a-b a-b
5 105 b-a a-b
6 106 b-a a-b
7 107 a-c-b a-b-c
答案 2 :(得分:1)
您可以使用src
Col1
置换到位
levels<-
或使用df <- data.frame(Id = 101:107,
Col1 = c("a-b-c-d", "a-c-d", "a-b", "a-b", "b-a", "b-a", "a-c-b"))
levels(df$Col1) <- sapply(strsplit(levels(df$Col1), '-'),
function(x) paste(sort(x), collapse = '-'))
df
#> Id Col1
#> 1 101 a-b-c-d
#> 2 102 a-c-d
#> 3 103 a-b
#> 4 104 a-b
#> 5 105 a-b
#> 6 106 a-b
#> 7 107 a-b-c
或forcats::fct_relabel
:
lvls_revalue