Переопределить фрейм данных в R - PullRequest
0 голосов
/ 01 сентября 2010

база данных $ VAR который имеет значения 0 и 1.

Как я могу переопределить фрейм данных, чтобы удалить единицы?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 01 сентября 2010

TMTOWTDI

Использование subset:

df.new <- subset(df, VAR == 0)

EDIT:

Решение Дэвида кажется самым быстрым на моей машине. Подмножество кажется самым медленным. Я даже не буду притворяться, что пытаюсь понять, что происходит под этим, объясняет эти различия:

> df <- data.frame(y=rep(c(1,0), times=1000000))
> 
> system.time(df[ -which(df[,"y"]==1), , drop=FALSE])
   user  system elapsed 
   0.16    0.05    0.23 
> system.time(df[which(df$y == 0), ])
   user  system elapsed 
   0.03    0.01    0.06 
> system.time(subset(df, y == 0))
   user  system elapsed 
   0.14    0.09    0.27 
2 голосов
/ 01 сентября 2010

Я бы подтвердил ответ, используя «подмножество», если бы у меня была репутация :-).Вы также можете использовать логический вектор непосредственно для поднабора - нет необходимости для «который»:

d <- data.frame(VAR = c(0,1,0,1,1))
d[d$VAR == 0, , drop=FALSE]

Я удивлен, обнаружив логическую версию немного быстрее, по крайней мере, в одном случае.(Я ожидал, что «какая» версия может победить из-за того, что R, возможно, предварительно выделит нужный объем памяти для результата.)

> d <- data.frame(y=rep(c(1,0), times=1000000))
> system.time(d[which(d$y == 0), ])
   user  system elapsed 
  0.119   0.067   0.188 
> system.time(d[d$y == 0, ])
   user  system elapsed 
  0.049   0.024   0.074 
1 голос
/ 01 сентября 2010

Попробуйте это:

R> df <- data.frame(VAR = c(0,1,0,1,1))
R> df[ -which(df[,"VAR"]==1), , drop=FALSE]
  VAR
1   0
3   0
R> 

Мы используем which( booleanExpr ), чтобы получить индексы, для которых выполняется ваше условие, затем используем -1 для них, чтобы исключить их, и, наконец, drop=FALSE, чтобы предотвратить падение наших data.frame из одного столбца в вектор.

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