2016-05-19 5 views
0

私は、1人のアスリートが提供する2つの垂直ジャンプの垂直地面反力を含むデータセットを持っています。これは連続変数です。私はまた、連続変数でもあるアスリートの変位を与える列を持っています。データは両方のジャンプで500Hzでサンプリングされますが、ジャンプ#1はジャンプ#2よりも実行に時間がかかりましたので、より多くの行があります。時間はRでジャンプ力変数を正規化する

力の変数を両方のジャンプの長さに合わせるために、変位全体の0〜100%のスケールで各ジャンプからの変位を正規化します。次に、ジャンプ全体の平均力対変位曲線の平均を計算したい。

データセットがかなり長いので、私はデータが現在どのように存在しているか、そしてどのようにそれが最終的に見えるようにしたいかの短縮例を含めました。私は誰かが、0〜100%のスケールで変位を正規化し、各ジャンプの行数が同じであることを保証するための良いアプローチを提供できることを期待しています。

NB:以下のコードでは、データを簡単な方法で設定する方法を示すためにサンプリング周波数を10 Hzに設定しました。私は自分のアプローチについて助言を得ることができます。

現在の生データ構造:

Jump_Number  Displacement Force Time 
    1    0   800  0 
    1    -0.10   700  0.1 
    1    -0.29   500  0.2 
    1    -0.40   200  0.3 
    1    -0.45   100  0.4 
    1    -0.50   500  0.5 
    1    -0.30   800  0.6 
    1    -0.10   1200  0.7 
    1    -0.05   1300  0.8 
    1    0.05   1250  0.9 
    2    0   800  0.0 
    2    -0.10   678  0.1 
    2    -0.29   499  0.2 
    2    -0.40   178  0.3 
    2    -0.45   90  0.4 
    2    -0.50   600  0.5 
    2    -0.40   810  0.6 
    2    -0.35   999  0.7 
    2    -0.29   1135  0.8 
    2    -0.10   1250  0.9 
    2    -0.05   1401  1.0 
    2    0.05   1345  1.1 

理想の正規化されたデータ構造:

Jump_Number  Normalized_Displacement_(%) Force  
    1      0     800  
    1     10     700  
    1     20     500  
    1     30     200  
    1     40     100  
    1     50     500  
    1     60     800  
    1     70     1200  
    1     80     1300  
    1     90     1289 
    1     100     1250  
    2     0      800  
    2     10      678  
    2     20      499  
    2     30      178  
    2     40      90   
    2     50      600  
    2     60      810  
    2     70      999  
    2     80      1135  
    2     90      1250  
    2     100      1345  
+0

希望の結果の値は一例にマッチされていない場合を除き、列「正規化された変位を」得呼び出す理由は完全に明らかではありません。私は正規化が '(Displacement - min)/ range * 100'のようにできると思います。 – Bulat

答えて

0

私はあなたが本当に「正規化された変位に対応する力を期待していないことを前提としています元の変位に対するものと等しくなるようにする。その前提で、以下のスクリプトを使用して必要なデータを生成することができます。スクリプトによって生成されるプロットの

require(ggplot2) 

# Read the data 
jump_names = c("Jump_Number", "Displacement", "Force", "Time") 
jump_data = transpose(data.frame(
    c(1, 0, 800, 0), 
    c(1, -0.10, 700, 0.1), 
    c(1, -0.29, 500, 0.2), 
    c(1, -0.40, 200, 0.3), 
    c(1, -0.45, 100, 0.4), 
    c(1, -0.50, 500, 0.5), 
    c(1, -0.30, 800, 0.6), 
    c(1, -0.10, 1200, 0.7), 
    c(1, -0.05, 1300, 0.8), 
    c(1, 0.05, 1250, 0.9), 
    c(2, 0, 800, 0.0), 
    c(2, -0.10, 678, 0.1), 
    c(2, -0.29, 499, 0.2), 
    c(2, -0.40, 178, 0.3), 
    c(2, -0.45, 90, 0.4), 
    c(2, -0.50, 600, 0.5), 
    c(2, -0.40, 810, 0.6), 
    c(2, -0.35, 999, 0.7), 
    c(2, -0.29, 1135, 0.8), 
    c(2, -0.10, 1250, 0.9), 
    c(2, -0.05, 1401, 1.0), 
    c(2, 0.05, 1345, 1.1))) 
names(jump_data) = jump_names 
jump_data$Jump_Number = as.factor(jump_data$Jump_Number) 

# Compute percent displacement 
jump_data$Total_Displacement = ave(abs(jump_data$Displacement), jump_data$Jump_Number, FUN = cumsum) 
jump_data$Max_Displacement = ave(abs(jump_data$Total_Displacement), jump_data$Jump_Number, FUN = max) 
jump_data$Percent_Displacement = jump_data$Total_Displacement/jump_data$Max_Displacement*100 

# Split the data 
jump_data_split = split(jump_data, jump_data$Jump_Number) 

# Apply interpolation and the combine 
interp_data = data.frame() 
for (ii in 1:length(jump_data_split)) { 
    linear_interp = data.frame(approx(jump_data_split[[ii]]$Percent_Displacement, 
       jump_data_split[[ii]]$Force, 
       xout = seq(0, 100, by = 10), 
       method = "linear")) 
    linear_interp$Jump_Number = paste0(ii, "interp") 
    interp_data = rbind(interp_data, linear_interp) 
} 
interp_data$Jump_Number = as.factor(interp_data$Jump_Number) 
names(interp_data) = c("Percent_Displacement", "Force", "Jump_Number") 

# Plots 
plt = ggplot(jump_data, 
      aes(x = Time, y = -Displacement, 
       color = Jump_Number, group = Jump_Number)) + 
     geom_path() + 
     theme_bw() 
print(plt) 
dev.copy(png, "disp_time.png") 
dev.off() 

dev.new() 
plt0 = ggplot(jump_data, 
      aes(x = Time, y = Total_Displacement, 
       color = Jump_Number, group = Jump_Number)) + 
     geom_path() + 
     theme_bw() 
print(plt0) 
dev.copy(png, "tot_disp_time.png") 
dev.off() 

dev.new() 
plt1 = ggplot(jump_data, 
      aes(x = Time, y = Force, 
       color = Jump_Number, group = Jump_Number)) + 
     geom_path() + 
     theme_bw() 
print(plt1) 
dev.copy(png, "force_time.png") 
dev.off() 

dev.new() 
plt2 = ggplot()+ 
     geom_path(data = jump_data, aes(x = Percent_Displacement, y = Force, 
       color = Jump_Number, group = Jump_Number)) + 
     geom_path(data = interp_data, aes(x = Percent_Displacement, y = Force, 
       color = Jump_Number, group = Jump_Number)) + 
     theme_bw() 
print(plt2) 
dev.copy(png, "force_percent_disp.png") 
dev.off() 

names(interp_data) = c("Normalized_Displacement_(%)", "Force", "Jump_Number") 
print(interp_data) 

一つである:

percent_displacement_time

関連する問題