база данных $ VAR , которая имеет значения 0 и 1.Redefine Data Frame в R
Как я могу переопределить фрейм данных так, чтобы 1 были удалены?
Спасибо!
база данных $ VAR , которая имеет значения 0 и 1.Redefine Data Frame в R
Как я могу переопределить фрейм данных так, чтобы 1 были удалены?
Спасибо!
Попробуйте это:
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
из одной колонки от коллапса в вектор.
Интересно, но если после этого я вызову 'database $ VAR', я все равно получаю как 1, так и 0 .... – Brian
Вам придется назначить результат обратно в' database' или назначить его новой переменной. – Greg
Когда я иду: 'data1base $ NEW <- df' Я получаю сообщение об ошибке: Ошибка в $ <-. Data.frame' (' * tmp * '," NEW ", value = list (VAR = c (0, 1,: замена имеет 5 строк, данные имеют 819 – Brian
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
Включите 'drop = FALSE' во втором времени. Это замедлит этот метод. – Marek
Я upvote ответ, используя «подмножество», если бы я имел репутацию за это :-). Вы также можете использовать логический вектор непосредственно для Подменю - нет необходимости «который»:
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 или удалено все наблюдения со значением 1 удалены? Или вы хотите разделить кадр данных на отдельные наблюдения с помощью VAR == 0 и VAR == 1? – Greg
Я хочу, чтобы все наблюдения со значением 1 удалялись, так что, когда я вызываю 'database $ VAR', я получаю только 0. Благодаря! – Brian