2016-10-15 5 views
0

Рассмотрим вектор х:создать новый dataframe из недостающих значений

x <- c(0, 5, 10, 25, 30) 

Я хотел бы создать новый вектор с «отсутствующими значениями», что означает, что все значения, которые были «пропущены», если бы я иметь последовательность с интервалами 5.

таким образом, для данного примера, выходной shouldbe:

xna <- c(15, 20) 

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

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 
} 

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

Пожалуйста, помогите,

+2

Почему 15 элемент 'xna'? Это также элемент 'x', и из того, что я понимаю, не« пропущено ». Не могли бы вы уточнить? –

+0

Вы правы, я отредактировал вопрос. 15 не должно быть. –

ответ

1

Solution в базе 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 
+0

Могу ли я задать более глубокий вопрос? Есть ли у вас какие-либо предложения о том, как новичок вроде меня мог бы эффективно найти такую ​​функцию (например, 'setdiff') самостоятельно? Я часто разочаровываюсь, потому что я могу задать только 90 минут на вопрос, и поиск в сети и даже переполнение стека иногда ошеломляют, потому что там так много, и часто это не совсем то, что я хочу, или часто не представляется в способ, который я могу понять. По достоинству оценят некоторые отзывы. –

+0

Не беспокойтесь @DevangAkotia, я почувствовал себя очень схожим, когда начал учиться R. У меня есть три совета: 1. Выполните (и на самом деле воспроизводите примеры) общедоступные вступительные (и промежуточные) курсы по R. 2. Используйте справку R. Например, вы можете узнать о 'setdiff' при поиске других заданий, таких как'? Intersect' или '? Union'. 3. Проведите время чтения SO R-помеченных вопросов. Вы обнаружите, что многому научились из вопросов и ответов. Dataframe и векторные манипуляции лежат в основе многих вопросов, связанных с R. –

+0

@DevangAkotia: Вы можете прояснить, является ли полный новичок программированием вообще или просто новичком с R с солидным опытом на другом компьютерном языке. Ответ на вопрос «как найти материал» может отличаться. В первом случае вам нужно будет узнать имена математических понятий, связанных с манипуляциями данными. http://norvig.com/21-days.html –

3

Если вам нужна как функция,

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 
Смежные вопросы