Jen*_*ise 5 if-statement r dataframe
我需要在我的数据框的一列中将某些数值设置为零,如果在另一列中它们具有某个因子级别.
我的数据框df看起来像:
Items Store.Type
5 A
4 B
3 C
6 D
3 B
7 E
Run Code Online (Sandbox Code Playgroud)
我想要做的是使Items = 0,对于Store.Type ="A"或"C"的所有行
我对R很新,但想到这将是"If Store.Type A then Items < - 0"形式的条件语句(然后重复Store.Type C),但我不明白?"if"一页.我试过了:
df$ItemsFIXED <- with(df, if(Store.Type == "A")Items <-0)
Run Code Online (Sandbox Code Playgroud)
并收到警告信息:
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`
Run Code Online (Sandbox Code Playgroud)
所以我在这里注意到以下内容:
if是一个控制流语句,将单个逻辑值作为参数ifelse是一个矢量化函数,以向量作为其所有参数.
因此,想象我需要ifelse完成整个列并能够理解?ifelse页面,我试图做"如果Store.Type A然后项目< - 0否则什么都不做".事实上我希望它嵌套,所以我尝试了以下代码(现在创建一个新列,所以我不会弄乱我的数据,但最终它会覆盖Items数据)
df$ItemsFIXED <- with(df, ifelse(Store.Type == "A", Items <-0,
ifelse(Store.Type == "C", Items <-0,)))
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
Error in ifelse(Store.Type2 == "Franchise - Brand", Total.generic.items <- 0, :
argument "no" is missing, with no default
Run Code Online (Sandbox Code Playgroud)
但是,如果我把任何东西放入no其中,只需写出正确的值.我试图把Items与Items <- Items中说"其他项目留为项目"在下面,但这只是改变了一切为零.
df$ItemsFIXED <- with(df, ifelse(Store.Type == "A", Items <-0,
ifelse(Store.Type == "C", Items <-0,Items)))
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7288 次 |
| 最近记录: |