0

R で Google フォームの結果を処理しようとしていますが、文字列データの処理で壁にぶつかりました。

質問はここで見ることができます:

ここに画像の説明を入力

Google は、各応答をカンマで区切った単一の列で結果を返します。

彼らは最終的に次のようになります

ID | Type of Research
=====================
1  | Policy analysis, Review of other research
2  | Bla
3  | Review of other research, Original empirical research
4  | Policy analysis, Theoretical 
5  | Review of other research

grepl を使用して論理列を作成し、事前に選択された 3 つの応答の data.frame を作成しました。

Private$ResearchTypeOriginal <- grepl("Original", Private$ResearchType)
Private$ResearchTypeReview <- grepl("Review", Private$ResearchType)
Private$ResearchTypePolicy <- grepl("Policy", Private$ResearchType)

ResearchTypeGrid <- data.frame(Private$ResearchTypeOriginal, Private$ResearchTypeReview, Private$ResearchTypePolicy)

これはうまくいきます。ただし、「その他」も引き抜く必要があります。使っていました

ResearchTypeOther <- subset(Private, !grepl("Original", Private$ResearchType) & !grepl("Review", Private$ResearchType) & !grepl("Policy", Private$ResearchType), select=c(ID, ResearchType, PubLang, Reviewer))
ResearchTypeOther <- na.omit(ResearchTypeOther)

しかし、応答に事前選択された応答と無制限の応答の両方がある場合、この方法を使用すると失われることに気付きました。「Bla」応答を返すのには問題なく機能しますが、「その他」のみの応答のみです。

言い換えれば、これは

ID |  Type of Research
=======================
2  |  Bla 

しかし、私が欲しいのは

ID |  Type of Research
======================
2  |  Bla
4  |  Policy analysis, Theoretical

SO に投稿するのはこれが初めてで、明らかに R は初めてなので、質問の仕方に間違いがあればご容赦ください。これをうまく表現できていない場合は、申し訳ありません。同じ問題について他に 20 件ほどの質問があるため、柔軟な解決策が必要です。

助けてくれてありがとう。

4

3 に答える 3

0

ルークのおかげでわかった。まったくエレガントではありませんが、これはうまくいきました:

items <- c("Review of other research", 
           "Original empirical research", 
           "Policy analysis")
ResearchTypeOther <- data.frame((others <- gsub(sprintf("(,\\s)?(%s)(,\\s)?", paste(items, collapse = "|")), "", 
           sub(".*\\|\\s(.*)", "\\1", Private$ResearchType))))
ResearchTypeOther[ResearchTypeOther==""] <- NA
ResearchTypeOther <- na.omit(ResearchTypeOther)
于 2014-08-17T14:14:26.663 に答える
0

あなたは試すことができます:(@lukeAを使用docして)items

 library(stringr)
 doc[sapply(strsplit(doc, "\\d +\\||,"), function(x) {
                 x1 <- str_trim(x)
                 x2 <- x1[x1!='']
                 indx <- x2 %in% items
                 !(any(indx) & tail(indx,1))})]
  #[1] "2  | Bla"                            "4  | Policy analysis, Theoretical 
于 2014-08-17T14:16:17.033 に答える
0

の静脈で「正規表現」することができます

doc <- readLines(n = 5)
1  | Policy analysis, Review of other research
2  | Bla
3  | Review of research, Original empirical research
4  | Policy analysis, Theoretical 
5  | Review of other research

items <- c("Review of other research", 
           "Original empirical research", 
           "Policy analysis")
(others <- gsub(sprintf("(,\\s)?(%s)(,\\s)?", paste(items, collapse = "|")), "", 
           sub(".*\\|\\s(.*)", "\\1", doc)))
# [1] ""                   "Bla"                "Review of research"
# [4] "Theoretical "       ""  


sub(sprintf("(,\\s)?(%s)(,\\s)?", paste(others[others != ""], collapse = "|")), "", doc)
# [1] "1  | Policy analysis, Review of other research"
# [2] "2  | "                                         
# [3] "3  | Original empirical research"              
# [4] "4  | Policy analysis"                          
# [5] "5  | Review of other research" 
于 2014-08-17T12:39:09.803 に答える