3

私は大量の調査回答を扱っており、リストに保存されている値を使用して検索を実行しようとしています (質問のタイトルをデータフレームに取得するため)。インデックス作成で簡単なことを見落としているのではないかと心配していますが、それを実現することはできません。再現可能な例を次に示します。

survey.data <- data.frame(
  question.number = c("q2","q3","q4","q5")
)

titles <- list(q1="question1", 
           q2="question2", 
           q3="question3", 
           q4="question4", 
           q5="question5")

いくつかの質問を削除するなどのデータ操作を少し行った後、次のリスト インデックスを使用してデータ フレームに新しい question.title 変数を作成し、正しいタイトルを取得します。

survey.data$question.title <- titles[survey.data$question.number]

出力は次のとおりです。

    question.number question.title
1   q2  question1
2   q3  question2
3   q4  question3
4   q5  question4

新しい変数がルックアップを適用していないことがわかります。最初の値から始まるリストのすべての値を「インポート」しているだけです。

リストを使ってこの種のルックアップを行うための適切なヘルプが見つからないので、おそらくお勧めできませんか? 修正または代替案をいただければ幸いです。

4

3 に答える 3

3

これが1つの解決策ですが、共有する前に、繰り返し質問(「q2」)を追加してデータを少し変更しました。

survey.data <- data.frame(
  question.number = c("q2","q3","q4","q5", "q2")
)

titles <- list(q1="question1", 
               q2="question2", 
               q3="question3", 
               q4="question4", 
               q5="question5")

このソリューションでは、 と を使用matchunlistます。

survey.data$question.title <- unlist(titles[match(survey.data$question.number, 
                                                  names(titles))])
survey.data
#   question.number question.title
# 1              q2      question2
# 2              q3      question3
# 3              q4      question4
# 4              q5      question5
# 5              q2      question2

これは、これを書いている時点で既に存在する 2 つのソリューションとどう違うのでしょうか?

2 つの主な方法:

  1. これらのソリューションはどちらも、重複した「q2」の質問に対応していません。

    > survey.data$question.title <- titles[names(titles) %in% survey.data$question.number]
    Error in `$<-.data.frame`(`*tmp*`, "question.title", value = list(q2 = "question2",  : 
      replacement has 4 rows, data has 5
    > survey.data$question.title <- titles[levels(survey.data$question.number)]
    Error in `$<-.data.frame`(`*tmp*`, "question.title", value = list(q2 = "question2",  : 
      replacement has 4 rows, data has 5
    
  2. 他のソリューションは両方ともlist、「question.title」列の構造を保持します (を使用しない場合、このソリューションも同様ですunlist)。これは、データをcsv ファイルは後で。結果の列が であることを視覚的に示すものがないため、特に厄介ですが、結果の ucture をlist表示することで確認できます。strdata.frame
于 2013-04-15T10:04:11.457 に答える