Мне нужно установить определенные числовые значения в одном столбце моего кадра данных в ноль, если в другом столбце они имеют определенный коэффициент.Изменение числовых значений в одном столбце на основе коэффициентов в другом столбце
Мой dataframe ДФ выглядит что-то вроде:
Items Store.Type
5 A
4 B
3 C
6 D
3 B
7 E
То, что я хочу сделать, это Items = 0, для всех строк, где Store.Type = "A" или "C"
I» m очень новый для R, но решил, что это будет условным выражением формы «If Store.Type A then Items < - 0» (а затем повторите для Store.Type C), но я не понял страницу ?"if"
вообще. Я пробовал:
df$ItemsFIXED <- with(df, if(Store.Type == "A")Items <-0)
и получил предупреждение:
Warning message:
In if (Store.Type2 == "Chain - Brand") Total.generic.items <- 0 :
the condition has length > 1 and only the first element will be used`
Так что я заметил here следующее:
if
is a control flow statement, taking a single logical value as an argumentifelse
is a vectorised function, taking vectors as all its arguments.
Так выясняя мне нужно ifelse
сделать весь столбец и быть способный понять страницу ?ifelse
, я попытался сделать «Если Store.Type A, то Items < - 0 else ничего не делать». На самом деле я хотел его вложенным, поэтому я попытался следующий код (создать новый столбец сейчас, так что я не испортили мои данные, но в конечном счете это приведет к перезаписи данных Items)
df$ItemsFIXED <- with(df, ifelse(Store.Type == "A", Items <-0,
ifelse(Store.Type == "C", Items <-0,)))
и получил следующее ошибка:
Error in ifelse(Store.Type2 == "Franchise - Brand", Total.generic.items <- 0, :
argument "no" is missing, with no default
Но если я надену что-нибудь в течение no
он просто записывает над значениями, которые являются правильными. Я попробовал поставить Items
и Items <- Items
, чтобы сказать «else leave Items as Items», как в следующем, но это просто изменило все на ноль.
df$ItemsFIXED <- with(df, ifelse(Store.Type == "A", Items <-0,
ifelse(Store.Type == "C", Items <-0,Items)))
Есть ли способ сказать ifelse
ничего не делать, или есть более простой способ сделать это?
'DF $ Элементы [которые (df $ Store.Type == "A" | df $ Store.Type == "C")] <- 0' – Alex
т.е. найдите строки, которые нужно изменить, затем установите эти записи на 0. – Alex
Спасибо всем за эти решения, они действительно работают, но я не совсем уверен, как и почему еще! Я думаю, что 'which' и'% in% 'кажутся простейшими, что я должен изучить больше. – JenLouise