【发布时间】:2014-11-12 06:00:13
【问题描述】:
如果在另一列中它们具有特定因子水平,我需要将数据框的一列中的某些数值设置为零。
我的数据框 df 看起来像:
Items Store.Type
5 A
4 B
3 C
6 D
3 B
7 E
我想要做的是让 Items = 0,对于 Store.Type = "A" 或 "C" 的所有行
我对 R 很陌生,但我认为这将是“If Store.Type A then Items ?"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是一个控制流语句,以单个逻辑值作为参数ifelse是一个向量化函数,将向量作为其所有参数。
所以我想我需要ifelse 来完成整个专栏并能够理解?ifelse 页面,我尝试执行“如果 Store.Type A 则 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什么都不做,或者有更简单的方法吗?
【问题讨论】:
-
df$Items[which(df$Store.Type == "A" | df$Store.Type == "C" )] <- 0 -
即找到需要更改的行,然后将这些条目设置为 0。
-
感谢大家提供这些解决方案,它们确实都有效,但我还不确定如何/为什么!我认为
which和%in%似乎是我应该研究的最简单的。 -
哦,@Alex 我会投票给你的答案,但我不知道如何,因为它在评论中......
标签: r if-statement dataframe