-1

行ごとのリストとして測定値が保存されたデータフレームがあります。

  Subject                 Measurements
1      s1  -0.4, -0.9, -1.1, -0.1,  0.1
2      s2  -1.4, -1.7, -1.7, -0.6, -1.7
3      s3  -1.0, -0.1, -0.6, -0.5, -0.1
4      s4  -0.2, -0.5, -0.2,  0.1, -0.7
5      s5   0.7,  0.2,  0.4,  0.7,  0.2
6      s6  -0.3, -0.1,  0.1, -0.2, -0.1

標準偏差/その他のリスト操作を平均化/検索し、出力をデータフレームの新しい列に追加するにはどうすればよいですか (例: 「平均」)

編集

私が扱っているデータ構造は次のとおりです。

structure(list(Subject = structure(1:6, .Label = c("s1", "s2", 
"s3", "s4", "s5", "s6"), class = "factor"), Measurements = list(
c(-0.4, -0.9, -1.1, -0.1, 0.1), c(-1.4, -1.7, -1.7, -0.6, 
-1.7), c(-1, -0.1, -0.6, -0.5, -0.1), c(-0.2, -0.5, -0.2, 
0.1, -0.7), c(0.7, 0.2, 0.4, 0.7, 0.2), c(-0.3, -0.1, 0.1, 
-0.2, -0.1))), .Names = c("Subject", "Measurements"), row.names = c(NA, 
6L), class = "data.frame")
4

2 に答える 2

4

データをより効率的に保存すると、これははるかに簡単になります。

dat<- structure(list(Subject = structure(1:6, .Label = c("s1", "s2", 
"s3", "s4", "s5", "s6"), class = "factor"), Measurements = list(
c(-0.4, -0.9, -1.1, -0.1, 0.1), c(-1.4, -1.7, -1.7, -0.6, 
-1.7), c(-1, -0.1, -0.6, -0.5, -0.1), c(-0.2, -0.5, -0.2, 
0.1, -0.7), c(0.7, 0.2, 0.4, 0.7, 0.2), c(-0.3, -0.1, 0.1, 
-0.2, -0.1))), .Names = c("Subject", "Measurements"), row.names = c(NA, 
6L), class = "data.frame")

> dat <- data.frame(subject = dat$Subject,do.call(rbind,dat$Meas))
> dat$means <- apply(dat[,-1],1,mean)
> dat
  subject   X1   X2   X3   X4   X5 means
1      s1 -0.4 -0.9 -1.1 -0.1  0.1 -0.48
2      s2 -1.4 -1.7 -1.7 -0.6 -1.7 -1.42
3      s3 -1.0 -0.1 -0.6 -0.5 -0.1 -0.46
4      s4 -0.2 -0.5 -0.2  0.1 -0.7 -0.30
5      s5  0.7  0.2  0.4  0.7  0.2  0.44
6      s6 -0.3 -0.1  0.1 -0.2 -0.1 -0.12

各測定値を独自の列に配置したら、同様の関数を使用apply(または)することができます。rowMeans

于 2012-06-27T21:42:24.287 に答える
4

(df)Measurements内のマトリックスのようです。data.frame

df$means <- rowMeans(df$Measurements)

より一般的な解決策として、特定の関数に対して Margin = 1 で apply を使用できます。

df$SDs <- apply(df$Measurements, 1, sd)

実際にあなたが使用Measurementsする本物だったらlist

df$SDs <- lapply(df$Measurements, sd)

これにより最大のパフォーマンスが得られますが、今ではあなたのSDs列はlistそうvectorです.

df$SDs <- sapply(df$Measurements, sd)

(リストを含む data.frame を作成したとき、そのようには見えなかったので、最初は本当にリストだとは思いませんでした)。

于 2012-06-27T19:54:43.280 に答える