0

strsplit() を使用して名前の各要素を取得したフルネーム データがあります。

# Dataframe with a `names` column (complete names)
df <- data.frame(
    names =
          c("Adam, R, Goldberg, MALS, MBA", 
          "Adam, R, Goldberg, MEd", 
          "Adam, S, Metsch, MBA", 
          "Alan, Haas, MSW", 
          "Alexandra, Dumas, Rhodes, MA", 
          "Alexandra, Ruttenberg, PhD, MBA"),
    stringsAsFactors=FALSE)

# Add a column with the split names (it is actually a list)
df$splitnames <- strsplit(df$names, ', ')

以下に学位のリストもあります

degrees<-c("EdS","DEd","MEd","JD","MS","MA","PhD","MSPH","MSW","MSSA","MBA",
           "MALS","Esq","MSEd","MFA","MPA","EdM","BSEd")

各名前とそれぞれの学位の交点を取得したいと思います。

インターセクトを使用して 2 つのベクトルを比較できるように、名前リストを平坦化する方法がわかりません。試しunlist(df$splitname,recursive=F)てみると、各要素が個別に返されました。どんな助けでも大歓迎です。

4

2 に答える 2

3

試す

df$intersect <- lapply(X=df$splitname, FUN=intersect, y=degrees)

これにより、各要素の共通部分のリストが得られますdf$splitname(例: intersect(df$splitname[[1]], degrees) )。ベクトルとして使用する場合:

sapply(X=df$intersect, FUN=paste, collapse=', ')

おそらく完全な名前は1つ(たとえば、データフレームから)に由来するため、ベクトルとして必要だと思いますが、strsplitはリストを出力します。

それは動作しますか?そうでない場合は、意図を明確にしてください。

幸運を!

于 2013-02-20T04:31:52.533 に答える
0

継続性のために、あなたは使用することができますunlist

hh <- unlist(df$splitname)
intersect(hh,degrees)

例えば ​​:

ll <- list(c("Adam" ,    "R"    ,    "Goldberg" ,"MALS"  , "MBA "),
           c("Adam" ,    "R"    ,    "Goldberg", "MEd" ))

 intersect(hh,degrees)
[1] "MEd"

または同等のもの:

hh[hh %in% degrees]
[1] "MEd"

違いを得るには、

setdiff(hh,degrees)
[1] "Adam"     "R"        "Goldberg" "MALS"     "MBA "    

..。

于 2013-02-20T04:42:07.707 に答える