0

ワイドからロングに形状を変更し、特定の変数で整理する方法を説明する何千もの回答があります。頭を抱えていないのは何なのかわかりません。もともと rater、obs、val1、val2 などで始まる行を、rater のIRRの下の列に整理する必要があります。

以下で作成できる私のデータに似たフォーマットを考えると:

r1 <- c('bob', 'sally', "george", "bob", "sally", "george")
r2 <- c(1,1,1,2,2,2)
r3 <- c("bad", "good", "good", "good", "good", "bad")
r4 <- c("bad", "bad", "good", "good", "good", "bad")
df=data.frame(r1,r2,r3,r4)
df = setNames(df,  c('rater','obs', 'val1', 'val2'))

「評価者」に基づいてデータを列に整理する必要があります。特に 'obs' (観測番号) を保持できる場合、たとえば obs1_val1、obs1_val2 など、機能するものは何でも素晴らしいでしょう。

次の行に沿ったものについて:

dcast(df, obs ~ rater)

作成するもの:

   obs   bob   george sally
1   1    bad   good   bad
2   2    good  bad    good

ただし、これは val2 の値を集計して削除します。

むしろ、次のようなものが必要です。

              bob   sally   george
  obs1_val1   bad   good    good
  obs1_val2   bad   bad     good
  obs2_val1   good  good   bad
  obs2_val2   good  good   bad

同様の回答meltを見ると、dcast[実際には集計したくない - 列に積み重ねるだけ]の推奨事項が表示されます。

val1 と val2 の文字列は、私が試した要因と見なす必要があるため:

df$"val1" <- factor(df$val1, levels=c("bad","good"))
df$"val2" <- factor(df$val2, levels=c("bad","good"))

効果なし。取得:

Aggregation function missing: defaulting to length

    obs bob  george sally
1   1   2      2     2
2   2   2      2     2

これは役に立ちません。

?

4

2 に答える 2

1

val1列とval2列の両方に対するrbindingdcast()呼び出しを検討してください。さらに、対応するval値を取得するための列を追加します ( で削除されるため)。したがって、次の使用:dcastdata.frame()

rdf <- rbind(data.frame(val=c("va1"), dcast(df, obs ~ rater, value.var="val1")),
             data.frame(val=c("va2"), dcast(df, obs ~ rater, value.var="val2")))

#   val obs  bob george sally
# 1 va1   1  bad   good  good
# 2 va1   2 good    bad  good
# 3 va2   1  bad   good   bad
# 4 va2   2 good    bad  good

多くのvallapply()列がある場合はdo.call(rbind, ...)、リストで繰り返します。

valcols <- names(df)[grep("val", names(df))] 

dfList <- lapply(valcols, function(v) {
  data.frame(val=c(v), dcast(df, obs ~ rater, value.var=v))
})    
rdf <- do.call(rbind, dfList)

最後に、文字変数を因子呼び出しにレンダリングするには、次のようas.factor()にしsapply()ます。

rdf <- data.frame(sapply(rdf, as.factor))
str(rdf)

# 'data.frame': 4 obs. of  5 variables:
# $ val   : Factor w/ 2 levels "val1","val2": 1 1 2 2
# $ obs   : Factor w/ 2 levels "1","2": 1 2 1 2
# $ bob   : Factor w/ 2 levels "bad","good": 1 2 1 2
# $ george: Factor w/ 2 levels "bad","good": 2 1 2 1
# $ sally : Factor w/ 2 levels "bad","good": 2 2 1 2
于 2016-10-23T02:49:04.937 に答える