#r
#r
Вопрос:
Рассмотрим вектор x:
x <- c(0, 5, 10, 25, 30)
Я хотел бы создать новый вектор с «пропущенными значениями», что означает все значения, которые были «пропущены», если бы у меня была последовательность с интервалами 5.
Итак, для этого примера вывод должен быть:
xna <- c(15, 20)
Кроме того, мне нужно было бы создать функцию, чтобы я мог сделать это с любым вектором x.
nats <- function(x){
lastvalue <- x[length(x)]
firstvalue <-x[1]
xseq <- seq(firstvalue, lastvalue, 5)
for i in xseq {
# if x is not in x seq put it into a vecotr xna #
}
xna
}
Я действительно понятия не имею, как это сделать. Был бы очень признателен за предложения или если уже есть функция, которая может это сделать.
Пожалуйста, помогите,
Комментарии:
1. Почему 15 является элементом
xna
? Это также элементx
, и, насколько я понимаю, он не «пропущен». Не могли бы вы уточнить?2. вы правы, я отредактировал вопрос, . 15 не должно быть там.
Ответ №1:
Если вам нужно в качестве функции,
nats <- function(x, interval){
lastvalue <- x[length(x)]
firstvalue <-x[1]
xseq <- seq(firstvalue, lastvalue, interval)
xna <- xseq[!xseq %in% x]
return(xna)
}
x <- c(0,5,10, 15,25,30)
nats(x, 5)
#[1] 20
x <- c(3, 6,18)
nats(x, 3)
#[1] 9 12 15
Ответ №2:
Решение в базе R (см. ?setdiff
)
# Your data
x <- c(0, 5, 10, 25, 30)
# Your sequence
y <- seq(0, max(x), by = 5);
# "Skipped" values
s <- setdiff(y, x);
print(s);
[1] 15 20
Комментарии:
1. Могу я задать более глубокий вопрос? Есть ли у вас какие-либо предложения о том, как новичок вроде меня мог бы эффективно найти такую функцию (например,
setdiff
) самостоятельно? Я часто расстраиваюсь, потому что я могу задавать только 90 минут на вопрос, а поиск в сети и даже переполнение стека иногда являются ошеломляющими, потому что их так много, и часто это не совсем то, что я хочу, или это часто представлено не так, как я могу понять. Был бы признателен за обратную связь.2. Не беспокойтесь, @DevangAkotia, я чувствовал себя очень похоже, когда начал изучать R. У меня есть три совета: 1. Следуйте (и фактически воспроизводите примеры из) общедоступных вводных (и промежуточных) курсов по R. 2. Используйте справку R. Например, вы можете узнать об
setdiff
этом при поиске других операций набора, таких как?intersect
или?union
. 3. Потратьте время на чтение вопросов с меткой SO R. Вы обнаружите, что многому научились из вопросов и ответов. Манипуляции с фреймами данных и векторами лежат в основе многих вопросов, связанных с R.3. @DevangAkotia: Вы могли бы уточнить, являетесь ли вы полным новичком в программировании в целом или просто новичком в R с солидным опытом работы на другом компьютерном языке. Ответ вам «как найти материал» может отличаться. В первом случае вам нужно будет выучить названия математических понятий, связанных с манипулированием данными. norvig.com/21-days.html
4. Первым языком, который я начал изучать, был VBA excel. В течение некоторого времени я делал большинство вещей, таких как манипулирование данными в VBA, и использовал R только в качестве последнего средства, когда это было абсолютно необходимо (например, для создания графиков). Теперь я нахожу, что было бы эффективнее просто делать все на R, вместо того, чтобы использовать 2 языка для одной цели. Я бы сказал, что я новичок в обоих языках.
Ответ №3:
Использование %in%
оператора. См. https://stat.ethz.ch/R-manual/R-devel/library/base/html/match.html
xna <- xseq[!xseq%in%x]
Комментарии:
1. Спасибо. Отредактировал мой ответ