Создать фрейм данных из нескольких фреймов данных на основе условия, хранящегося в отдельном фрейме данных

У меня есть набор данных образца

> dput(samp_data)
structure(list(var1 = c(0.49125, 0.53519, 0.53549, 0.51473, 0.51576, 
0.55172, 0.49856, 0.51928, 0.53595, 0.54615, 0.54331, 0.45051, 
0.47404), var2 = c(0.0916, 0.11155, 0.09268, 0.10478, 0.09258, 
0.09682, 0.10693, 0.11326, 0.09986, 0.09308, 0.10138, 0.1009, 
0.07234), var3 = c(0.02766, 0.03226, 0.02159, 0.0277, 0.02598, 
0.02901, 0.0215, 0.02355, 0.02782, 0.02614, 0.02677, 0.01961, 
0.0132)), .Names = c("var1", "var2", "var3"), row.names = c(NA, 
13L), class = "data.frame")

Далее я делаю 3 комбинации фрейма данных, где первый ограничен максимумом 99 и минимумом 1 процентиль, вторым максимумом 98 и минимумом 2, третьим максимумом 97 и минимумом 3

#Creating 3 copies of the data set

samp_data_capped_991<-samp_data
samp_data_capped_982<-samp_data
samp_data_capped_973<-samp_data

for (i in 1:ncol(samp_data)){

  samp_data_capped_991[,i][samp_data_capped_991[,i]>quantile(samp_data_capped_991[,i],0.99)]  = quantile(samp_data_capped_991[,i],0.99)  
  samp_data_capped_991[,i][samp_data_capped_991[,i]<quantile(samp_data_capped_991[,i],0.01)]= quantile(samp_data_capped_991[,i],0.01)

  samp_data_capped_982[,i][samp_data_capped_982[,i]>quantile(samp_data_capped_982[,i],0.98)]= quantile(samp_data_capped_982[,i],0.98)  
  samp_data_capped_982[,i][samp_data_capped_982[,i]<quantile(samp_data_capped_982[,i],0.02)]= quantile(samp_data_capped_982[,i],0.02)

  samp_data_capped_973[,i][samp_data_capped_973[,i]>quantile(samp_data_capped_973[,i],0.97)]= quantile(samp_data_capped_973[,i],0.97)  
  samp_data_capped_973[,i][samp_data_capped_973[,i]<quantile(samp_data_capped_973[,i],0.03)]= quantile(samp_data_capped_973[,i],0.03)  

}

Теперь я вычисляю асимметрию и эксцесс для четырех наборов фреймов данных, то есть исходного набора данных и трех новых ограниченных наборов данных.

df= data.frame(matrix(ncol = ncol(samp_data), nrow=1))
colnames(df)= colnames(samp_data)

for (i in 1:ncol(samp_data)){

  df[1,i]= skewness(as.numeric(samp_data[,i]))
  df[2,i]= kurtosis(as.numeric(samp_data[,i]))-3

  df[3,i]= skewness(as.numeric(samp_data_capped_991[,i]))
  df[4,i]= kurtosis(as.numeric(samp_data_capped_991[,i]))-3

  df[5,i]= skewness(as.numeric(samp_data_capped_982[,i]))
  df[6,i]= kurtosis(as.numeric(samp_data_capped_982[,i]))-3

  df[7,i]= skewness(as.numeric(samp_data_capped_973[,i]))
  df[8,i]= kurtosis(as.numeric(samp_data_capped_973[,i]))-3

}

> df
                var1       var2       var3
skew_orig -0.7413985 -0.7517145 -0.7889652
kurt_orig -3.6674901 -2.6617448 -2.9977509
skew_991  -0.7050774 -0.6025567 -0.7411519
kurt_991  -3.7745564 -2.9932914 -3.2121416
skew_982  -0.6696813 -0.4467699 -0.6920714
kurt_982  -3.8763775 -3.3177515 -3.4307069
skew_973  -0.6355011 -0.2873809 -0.6424787
kurt_973  -3.9719539 -3.6238997 -3.6495129

Конечная цель состоит в том, чтобы выбрать набор значений из четырех фреймов данных для каждой переменной, где пара комбинаций асимметрии и эксцессов находится ближе всего к заданному условию.

Таким образом, если условие асимметрии & kurtosis должно быть ближе к 0, то для "var1" из 4 пар в кадре данных df, если skew_991 и kurt_991 удовлетворяют условию и, следовательно, в конечном кадре данных (давайте назовем его как df_final) var1 должен содержать значения, соответствующие фрейму данных samp_data_capped_991. Аналогично, если для var2, skew_973 & kurt_973 удовлетворяет условию, то значения в конечном кадре данных для var2 должны быть получены из samp_data_capped_973

0 ответов

Другие вопросы по тегам