r - 根据另一列中的因子水平更改一列中的数值

标签 r if-statement dataframe

我需要将数据框中一列中的某些数值设置为零,如果在另一列中它们具有特定的因子水平。

我的数据框 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 argument
  • ifelse 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 输入任何东西它只是写了正确的值。我试过把 ItemsItems <- 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/

相关文章:

r - Flowstrates 和 R : extracting and reshaping data in required format

python - 使用公式将行添加到数据框

java - If 语句在 For 循环中不起作用

powershell - Powershell脚本-如果和切换丢失的语句

Python pandas 获取数据帧的最大连续次数

python - 如果 header=None,则使用 pandas 确定 csv 文件中的标题

mysql - 如何在 r 中执行 MySQL 更新查询

r - 如何按唯一编号删除多列中的行?

R:如何在加载包时运行一些代码?

javascript - jQuery 隐藏所有没有类的元素