Как можно установить NA для каждых 3 других данных в кадре данных? - PullRequest
1 голос
/ 21 апреля 2011

Еще один довольно простой вопрос, на который я не могу найти однозначного ответа онлайн:

Предположим, у меня есть такой набор данных

dat<-c(1,2,3,4,5,6,7,8,9,10)

Я хочу изменить дату на

datnew<-c(1,2,3,NA,NA,NA,7,8,9,NA)

В основном просто заменить каждые 3 данные на NA в большом фрейме данных.

Спасибо

Ответы [ 2 ]

10 голосов
/ 21 апреля 2011

Создайте соответствующий индекс с помощью rep():

R> foo <- 1:10
R> foo
 [1]  1  2  3  4  5  6  7  8  9 10
R> ind <- rep(c(FALSE, TRUE), each=3)
R> ind
 [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE
R> foo[ind] <- NA
R> foo
 [1]  1  2  3 NA NA NA  7  8  9 NA
R> 

Здесь вам поможет рециркуляция, поскольку созданный вами индекс применяется так часто, как это необходимо для вашего вектора данных.Изменить: Также показать ind выше.

0 голосов
/ 21 апреля 2011

Я думал, что есть лучший способ, но я ошибался, поскольку Дирк указал мне на это.Ниже я исправил свой ответ, но мой яснее, чем ответ Дирка.

foo[c(seq(4,length(foo),6),seq(5,length(foo),6),seq(6,length(foo),6))] <- NA

Если это действительно фрейм данных, то вам нужно указать строку, в которой вы хотите его применить, и использовать другую команду дляполучить количество элементов (например, dim (dat) [1]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...