我需要将数据框中一列中的某些数值设置为零,如果在另一列中它们具有特定的因子水平。
我的数据框 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 <- 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
在下面说“否则将项目保留为项目”,但这只是将所有内容更改为零。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
关于r - 根据另一列中的因子水平更改一列中的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903452/