Вы задали вопрос, который меняет направление на то, чтобы попросить других сделать всю вашу работу за вас.Вопрос об одном конкретном фрагменте этого проекта, вероятно, скорее всего привлечет ответ.Часть, с которой вы боретесь, которая мешает вам начать, является очень базовым навыком программирования: способность разбить вашу проблему на маленькие конкретные шаги, решить каждую из них по отдельности, а затем соединить их снова, чтобы решить вашу первоначальную проблему .
Этот навык также очень сложен в изучении.Но у тебя хорошее начало!Вы правильно определили четыре группы, в которые могут попасть ваши данные:
Все значения для «данных» равны NA
Все значения для «данных»'идентичны, нет NA
По крайней мере, 1 значение для «Данные» не является идентичным, нет NA.
По крайней мере, 1 значение для «данных» не является идентичным, по крайней мере, одно - NA.
Теперь вам нужно подумать о том, как,если у вас есть только одно подмножество ваших данных, можете ли вы выяснить, как определить в R, в какую группу (1-4) они входят?Ниже приведен набросок некоторых инструментов, которые могут быть полезны для этого.Создайте несколько подмножеств и поэкспериментируйте в консоли, пока не почувствуете себя комфортно при определении каждой группы:
(1) Все ли значения для datSub$Data
NA
s?
Инструменты: all
и is.na
(2) Только одно уникальное значение, а не NA
?
Инструменты: length
, unique
, is.na
, any
(3) Более одного уникального значения, нет NA
с?
Инструменты: length
, unique
, any
, is.na
(4) Ещеодно уникальное значение, по крайней мере одно NA
?
Инструменты: length
, unique
, any
, is.na
Это может быть возможно сделать без использованиявсе эти функции, но все они потенциально полезны.
Как только вы узнаете, как определить, в какую группу должен входить конкретный поднабор, вы готовы заключить этот код в функцию.Я бы предложил создать новый столбец со значением 1-4, в зависимости от того, в какую группу входит это подмножество:
myFun <- function(x){
if (...){
x$grp <- 1
}
if (...){
x$grp <- 2
}
#etc.
return(x)
}
Затем используйте ddply
, чтобы применить эту функцию к каждому подмножеству ваших данных на основезначения Sample
:
ddply(dat,.(Sample),.fun = myFun)
И, наконец, разделить этот фрейм данных на его новую переменную grp
:
split(dat,dat$grp)
Надеюсь, этот общий эскиз поможет вам начать работу.Но у вас будут проблемы.Все делают.Если по пути вы столкнетесь с конкретными проблемами, не стесняйтесь задавать еще один вопрос по этому поводу.
Действительно, теперь я вижу, что Джон опубликовал ответ в соответствии с моим эскизом.Однако я все равно опубликую этот ответ в надежде, что он поможет вам проанализировать будущие проблемы.