2017-10-06 10 views
0

私は、それぞれが別の参加者のデータを表す44 * .csvファイルのセットを持っています。列名は各ファイルで同じです。私はVarAでフィルタリングして、x == Tにして、順列テストのためにVarBをランダム化します。私は44ファイルを連結したいと思う。 、これは、参加者の中に、私が以前にコードがサンプル()とforループを使用してデータを擬似ランダム化するR

data <- list.files(path = "./MyData/files/", 
        pattern="*.csv", 
        full.names = T) %>% 
    map_df(function(x) read_csv(x, col_types = cols(.default = "c")) %>% 
      mutate(filename=gsub(".csv","",basename(x)))) 

new.data <- data %>% filter(VarA == T) 

new.data.scramble <- (sample(new.data$VarB)) 

を使用して最初にすべてのファイルを連結して、データをランダム化することによって成功し、これをやった

subj VarA VarB filename 
    1  T  a  1_a 
    1  T  f  1_b 
    2  T  g  2_a 
    2  F  a  2_b 

例えば

ランダム化していません。私はforループがこれを行うための最良の方法だと信じていますが、私はこの方法に慣れていません。

答えて

1

「VarBをランダム化する」とは何かが不明です。あなたのコード例は単にそれをシャッフルします。あなたは順列テストをしていますか?あなたの例に忠実であることが、それ以外は

data %>% filter(VarA == T) %>% group_by(filename) %>% sample_frac(size=1, replace=FALSE) 

しかし、のために:それだけgroup_byを必要とするので、あなたはすでにdplyrを使用している

は、参加者がデータフレームで識別されて順列テスト、これはではありません。観測とその主題をシャッフルします。そのために、私たちは更新コラムに持っているが、我々はまだこれを行うことができます:

data %>% filter(VarA == T) %>% group_by(filename) %>% mutate(varB=sample(varB)) 
+0

これは動作します - あなたに感謝!私は質問を編集したので、今はっきりしていることを願っています。 –

+0

私は、順列テストのために自分の答えを説明しました。 – MrGumble

関連する問題