2013-04-23 2 views
1

Я создаю корреляции с использованием R, с помощью следующего кода:Использование R для удаления данных, которая ниже квартили порог

Values<-read.csv(inputFile, header = TRUE) 
O<-Values$Abundance_O 
S<-Values$Abundance_S 
cor(O,S) 
pear_cor<-round(cor(O,S),4) 
outfile<-paste(inputFile, ".jpg", sep = "") 
jpeg(filename = outfile, width = 15, height = 10, units = "in", pointsize = 10, quality = 75, bg = "white", res = 300, restoreConsole = TRUE) 
rx<-range(0,20000000) 
ry<-range(0,200000) 
plot(rx,ry, ylab="S", xlab="O", main="O vs S", type="n") 
points(O,S, col="black", pch=3, lwd=1) 
mtext(sprintf("%s %.4f", "pearson: ", pear_cor), adj=1, padj=0, side = 1, line = 4) 
dev.off() 
pear_cor 

теперь мне нужно найти нижний квартиль для каждого набора данных и исключить данные, находится внутри нижнего квартиля. Затем я хотел бы переписать данные без этих значений и использовать новый столбец данных в корреляционном анализе (потому что я хочу, чтобы порог данных был ниже квартили). Если есть способ, я могу написать это, чтобы было легко изменить порог, применяя аргументы от Java (как у меня с именем входного файла), что еще лучше!

Большое вам спасибо.

Теперь я сказал ответ ниже, и это работает, однако мне нужно сохранить пары данных для корреляции. Вот пример моих данных (из CSV):

Abundance_O Abundance_S 
3635900.752 1390.883073 
463299.4622 1470.92626 
359101.0482 989.1609251 
284966.6421 3248.832403 
415283.663 2492.231265 
2076456.856 10175.48946 
620286.6206 5074.268802 
3709754.717 269.6856808 
803321.0892 118.2935093 
411553.0203 4772.499758 
50626.83554 17.29893001 
337428.8939 203.3536852 
42046.61549 152.1321255 
1372013.047 5436.783169 
939106.3275 7080.770535 
96618.01393 1967.834701 
229045.6983 948.3087208 
4419414.018 23735.19352 

Так что мне нужно, чтобы исключить оба значения в строке, если один не отвечает моему порог квартили (0,25 квартили). Поэтому, если квартиль для O равен 45000, тогда строка «42046.61549,152.1321255» будет удалена. Это возможно? Если я прочитаю в обоих столбцах в качестве фрейма данных, я могу искать каждый столбец отдельно? Или найти квартили, а затем ввести это значение в код, чтобы удалить соответствующие строки?

Еще раз спасибо, и извините за эволюцию вопроса!

+0

Привет, добро пожаловать в SO. Поскольку вы новичок здесь, вы можете прочитать разделы [** about **] (http://stackoverflow.com/about) и [** FAQ **] (http://stackoverflow.com/faq) сайта, чтобы помочь вам извлечь максимальную выгоду из этого. Также прочитайте [**, как сделать отличный воспроизводимый пример **] (http://stackoverflow.com/q/5963269/1478381) и соответствующим образом обновите свой вопрос! –

ответ

4

Попробуйте представить воспроизводимый пример, но если у вас есть данные в data.frame, вы можете подмножить его, используя функцию quantile в качестве логического теста. Например, в следующих данных мы хотим выбрать только строки из фрейма данных, где значение измеряемой переменной «Вал» находится выше нижнего квартиля:

# set.seed so you can reproduce these values exactly on your system 
set.seed(39856) 
df <- data.frame(ID = 1:10 , Val = runif(10)) 
df 
    ID  Val 
1 1 0.76487516 
2 2 0.59755578 
3 3 0.94584374 
4 4 0.72179297 
5 5 0.04513418 
6 6 0.95772248 
7 7 0.14566118 
8 8 0.84898704 
9 9 0.07246594 
10 10 0.14136138 

# Now to select only rows where the value of our measured variable 'Val' is above the bottom 25% quartile 
df[ df$Val > quantile(df$Val , 0.25) , ] 
    ID  Val 
1 1 0.7648752 
2 2 0.5975558 
3 3 0.9458437 
4 4 0.7217930 
6 6 0.9577225 
7 7 0.1456612 
8 8 0.8489870 

# And check the value of the bottom 25% quantile... 
quantile(df$Val , 0.25) 
     25% 
0.1424363 
+0

Привет, спасибо :) Это компиляция, однако график корреляции дает только одну точку в 0. Чтобы попытаться выяснить, почему я использовал печать, чтобы показать фрейм данных в консоли. Это возвращает фрейм данных «TRUE» и «FALSE», а не числовой кадр чисел. Есть ли способ вернуть результат в виде новой таблицы чисел, которую я могу использовать для корреляционного анализа? – user2311396

+0

Вы уверены, что не просто набрали 'df $ Val> quantile (df $ Val, 0.25)' вместо 'df [df $ Val> quantile (df $ Val, 0.25),]'? Если вам нужна дополнительная помощь, вам нужно вставить вывод из 'dput (head (Values, n = 20))' в свой вопрос, чтобы мы могли видеть, с какими данными вы имеете дело. –

+0

Я использую> Synapt [SynaptAll> quantile (SynaptAll, thresh)] Если я использую> Synapt [SynaptAll> quantile (SynaptAll, thresh),] Я получаю сообщение об ошибке: Ошибка в Synapt [SynaptAll> quantile (SynaptAll, thresh) ]: неправильное количество измерений. Здесь вывод из dput (head (Values, n = 20): – user2311396

Смежные вопросы