我需要在数据框的一列中将某些数值设置为零,如果在另一列中它们具有一定的因子水平。
我的数据框df看起来像:
Items Store.Type
5 A
4 B
3 C
6 D
3 B
7 E
我想做的是使Store = 0的所有行的Items = 0,即“ A”或“ C”
我对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`
所以我在这里注意到以下内容:
if
是一个控制流语句,以单个逻辑值作为参数ifelse
是向量化函数,将向量作为其所有参数。
因此,弄清楚我需要ifelse
做整个专栏并能够理解?ifelse
页面,我试图做“如果Store.Type A则Items <-0否则不做任何事情”。实际上,我希望它嵌套,所以我尝试了以下代码(现在创建一个新列,这样我就不会弄乱我的数据,但最终它将覆盖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
说出“将其他项保留为项”,如下所示,但这只是将所有内容更改为零。
df$ItemsFIXED <- with(df, ifelse(Store.Type == "A", Items <-0,
ifelse(Store.Type == "C", Items <-0,Items)))
有没有办法告诉ifelse
什么都不做,还是有更简单的办法做到这一点?
或者您可以使用%in%
多个匹配/替换
df$Items[df$Store.Type %in% c("A", "C")] <- 0
df
#Items Store.Type
#1 0 A
#2 4 B
#3 0 C
#4 6 D
#5 3 B
#6 7 E
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句