0

追加の問題が発生したため、この問題のフォローアップの質問をしたいと思います: 複数のカテゴリ (芸術と人文科学と社会科学) に属する科目 (文化研究など) を発見しました。考慮する必要があるオーバーラップです。

この機械可読な例のようなカテゴリの長いリストがあります。

AB <- c("Science","Arts & Humanities","Arts & Humanities; Social Sciences","Science","Arts & Humanities; Arts & Humanities; Social Sciences","Science","Science; Social Sciences","Social Sciences; Science")  

したがって、次のようになります。

> AB  
[1] "Science"                                               "Arts & Humanities"  
[3] "Arts & Humanities; Social Sciences"                    "Science"  
[5] "Arts & Humanities; Arts & Humanities; Social Sciences" "Science"  
[7] "Science; Social Sciences"                              "Social Sciences; Science"  

この結果を得るために、これらの用語を編集して重複を排除したいと思います。

[1] "Science"                                    "Arts & Humanities"  
[3] "Arts & Humanities; Social Sciences"         "Science"  
[5] "Arts & Humanities; Social Sciences"         "Science"  
[7] "Science; Social Sciences"                   "Science; Social Sciences"  

だから私は#5で重複を排除するために別のループを探しています. strsplit()unique( )を使用してみましたが、うまくいきませんでした:

> unique(strsplit(AB, "; *"))  
[[1]]  
[1] "Science"  

[[2]]  
[1] "Arts & Humanities"  

[[3]]  
[1] "Arts & Humanities" "Social Sciences"  

[[4]]  
[1] "Arts & Humanities" "Arts & Humanities" "Social Sciences"  

[[5]]  
[1] "Social Sciences" "Science"  

もう一度お聞きしたいのですが、上記の正しい出力を得るにはどうすればよいですか? よろしくお願いします!

4

1 に答える 1

2

末尾または先頭の空白に関係していると思います。これを AB に適用すると、次の処理が行われます。

fun <- function(text.var){
    x <- unlist(strsplit(text.var, ";"))
    Trim <- function(x) gsub("^\\s+|\\s+$", "", x)
    paste(sort(unique(Trim(x))), collapse="; ")
}

sapply(AB, fun, USE.NAMES = FALSE)

収量:

> sapply(AB, fun, USE.NAMES = FALSE)
[1] "Science"                            "Arts & Humanities"                 
[3] "Arts & Humanities; Social Sciences" "Science"                           
[5] "Arts & Humanities; Social Sciences" "Science"                           
[7] "Science; Social Sciences"           "Science; Social Sciences"    
于 2012-10-24T17:29:48.390 に答える