gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:15:19 24 4
gpt4 key购买 nike

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

我的数据框 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com