簡體   English   中英

R,正則表達式和定性響應列的選擇匹配

[英]R, Regex, and Matching the Choice of a Qualtrics Response Column

當您從Qualtrics以CSV格式導出響應數據時,數據的第二行包含帶有問題詞干的字符串(必要時可縮短),后接短划線,然后是該響應列的相應選擇。 例如,如果我的問題是“請選擇您喜歡的所有水果:”,則在我的回答數據中,此問題的響應列的第二行可能包含諸如“請選擇您喜歡的所有水果:-藍莓” ”。

如果超過100個字符,Qualtrics將縮短問題詞干。 如果超過100個字符,則在第99個字符后截斷莖,附加“ ...”,然后是破折號和選擇文本。

我正在嘗試檢索此破折號之后的文本。 但是,這很困難,因為選擇文本和問題文本都可能包含破折號。 我想到了可以嘗試僅選擇選擇文本的兩種不同方法:

  1. 我有問題文本,並且可以根據響應列名稱可靠地以編程方式檢索它。 但是,問題文本並不總是完全匹配,因為Qualtrics會刪除響應數據中“問題”文本中的所有HTML樣式,但不會從我從中獲取問題文本的Qualtrics調查文件中刪除任何HTML樣式。 對於沒有任何HTML樣式的問題,我正在考慮嘗試使用問題文本以某種方式匹配並包括問題文本和選擇文本之間的破折號。 我認為regex可以很好地處理這種情況,但是如果不對具有HTML組件的任何問題進行大量修改,顯然這是行不通的。

  2. 我認為替代方法可能更可靠。 從任何HTML標記的QSF文件中剝離問題文本,然后計算問題文本中出現了多少個“-”字符。 調用n ,然后將第二行響應條目匹配到第n+1個破折號,將其刪除,剩下的就是我選擇的文本。

我認為第二個選項更有可能持續工作,因為第一個選項使我不得不嘗試以與Qualtrics完全相同的方式從問題文本中刪除html,除非我使用模糊匹配(一無所知)。 但是,第二種選擇對我也不清楚。

一個示例csv響應集

例如,第一個問題的問題文本在QSF中如下所示:

"<div style=\"text-align: center;\">Click to write the question text
<span style=\"font-size: 10.8333px;\">thsi<sup>tasdf<em>werasfd</em></sup>
<em>sdfad</em></span><br />\n&nbsp;</div>"

我將不勝感激以下兩項:對您認為最有可能成功的選項(或其他建議)的建議,以及R中的正則表達式的幫助,以使文本最多匹配第n+1個“-”字符。

這是一種對問題中的破折號進行計數的解決方案,在文本中找到第n個破折號(如果有),並刪除前面的字符,然后保留文本中下一個破折號之后的子字符串。

stem_text <- "Please--select your extracurriculars"
s <- "<em>Please</em>--select your extracurriculars-student-athletics"

# count dashes in question stem
stem_dash_n <- length(gregexpr("-", stem_text)[[1]])
# locate dashes in string
s_dashes <- gregexpr("-", s)[[1]]

sub_start <- ifelse(length(s_dashes), s_dashes[stem_dash_n], 1)
s_sub <- substr(s, sub_start + 1, nchar(s))
sub("[^\\-]*\\-(.*)", "\\1", s_sub, perl = TRUE)
# [1] "student-athletics"

假設:根據您的描述, length(s_dashes) >= stem_dash_n ,因此s_dashes[stem_dash_n]存在; 相同的破折號出現在已知詞干及其在文本中的表示形式; 並且總是有一個破折號將詞干和響應選擇區分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM