学生は、ズームポーリングを使用して、多肢選択問題(MCQ)でテストされています。クラスには40人の生徒がいて、30人のMCQがいます。ポーリングがどのように機能するかはよくわかりませんが、コースの教授は、Zoomが30個のExcelcsvファイル(MCQごとに1つ)を生成すると言いました。各ファイルには、学生の名前、ID、およびMCQ回答の1ポイントまたは0ポイントが含まれます。
私の仕事は、これらの30個のcsvファイル(フォルダーに保存している)をすべて取得し、それらをマージして各学生の合計スコアを見つける方法を見つけることです。だから、「ケイトは30点満点でどれくらい得点したの?」と言えるはずです。
各csvファイル(MCQ1、MCQ2、...という名前になります)は次のようになります。
Name SID Score
Kate 534 1
Bret 411 0
Jade 325 1
Rを使用してこれを行う必要があります。これが必要なものです。
Name SID MCQ1 MCQ2 MCQ3 MCQ4 MCQ5 ... Total
Kate 534 1 1 0 1 0 ... (=sum)
Bret 411 0 0 0 1 1 ... (=sum)
Jade 325 1 0 1 1 0 ... (=sum)
何が起こるために必要なのはRは、「名前」または「SID」とだけスタック使用して、各学生のためMCQスコアを見つける必要があるのスコアに次々と。
私はここSOで以下の投稿を見てきました。
これが私がこれまでに持っているものです:
total_score <- list.files(pattern = "*.csv") %>% map_df(read_csv)
Name SID Score
Kate 534 1
Bret 411 0
Jade 325 1
Kate 534 1
Bret 411 0
Jade 325 0
Kate 534 0
Bret 411 0
Jade 325 1
Kate 534 1
Bret 411 1
Jade 325 1
Kate 534 0
Bret 411 1
Jade 325 0
最初の2つの列を繰り返さず、特定の学生ごとにファイルから各「スコア」列のみを取得し、それらをcsvファイルにちなんで名付けられた新しい列として配置するようにRに指示するにはどうすればよいですか。誰かが私を正しい方向に向けることができますか?
でファイル名を抽出して「スコア」列の名前をファイル名に変更basename
し、「ファイル」をループしてデータを読み取りread_csv
、「スコア」の名前をファイル名(「nm1」)に変更reduce
して、次の方法で単一のデータセットに変更できます。データセットby
「名前」、「SID」を結合し、rowSums
「MCQ」で始まる列を実行して「合計」列を作成します。
library(readr)
library(dplyr)
library(purrr)
files <- list.files(pattern = "*.csv")
nm1 <- tools::file_path_sans_ext(basename(files))
imap(setNames(files, nm1),
~ {
nm <- .y
read_csv(.x) %>%
rename_at(vars(Score), ~ nm)
}) %>%
reduce(full_join, by = c('Name', 'SID')) %>%
mutate(Total = rowSums(select(., starts_with('MCQ'))))
-出力
# A tibble: 3 x 8
# Name SID MCQ1 MCQ2 MCQ3 MCQ4 MCQ5 Total
# <chr> <int> <int> <int> <int> <int> <int> <int>
#1 Bret 411 0 0 0 1 1 2
#2 Jade 325 1 0 1 1 0 3
#3 Kate 534 1 1 0 1 0 3
またはオプション data.table
library(data.table)
Reduce(function(x, y) x[y, on = .(Name, SID)],
Map(function(x, y) setnames(fread(x), 'Score', y),
files, nm1))[, Total := rowSums(.SD, na.rm = TRUE),
.SDcols = patterns("^MCQ")][]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加