R 根据另一列中的系数级别更改一列中的数值

R 根据另一列中的系数级别更改一列中的数值,r,if-statement,dataframe,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您可以在这里使用矢量化替换。Ifdf是您的数据集 > df$I

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

我的数据帧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
是您的数据集

> df$Items[with(df, Store.Type == "A" | Store.Type == "C")] <- 0L
> df
#   Items Store.Type
# 1     0          A
# 2     4          B
# 3     0          C
# 4     6          D
# 5     3          B
# 6     7          E


在(df,Items中,或者您可以使用%
中的
%进行多次匹配/替换

 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
df$Items[df$Store.Type%在%c(“A”、“c”)中]以下方法也适用:

> ddf[ddf$Store.Type=='A'| ddf$Store.Type=='C',]$Items = 0
> ddf
  Items Store.Type
1     0          A
2     4          B
3     0          C
4     6          D
5     3          B
6     7          E

中使用
似乎也是一种选择:

within(d, Items[Store.Type %in% c("A","C")]<-0)

  Items Store.Type
1     0          A
2     4          B
3     0          C
4     6          D
5     3          B
6     7          E

在(d,Items[Store.Type%在%c(“A”,“c”)中]这是解决问题的最佳方法

df$Items[其中(df$store.type==c('A','c'))]==0


df$Items[其中(df$Store.Type==“A”| df$Store.Type==“C”)]也就是说,找到需要更改的行,然后将这些条目设置为0。感谢所有人提供了这些解决方案,它们确实都能工作,但我还不确定如何/为什么!我认为
哪个
%在%
中似乎是最简单的,我应该进一步研究。哦,@Alex我会投票支持你的答案,但我不知道怎么做,g我知道这是在评论中。。。
df$ItemsFIXED <- with(df, ifelse(Store.Type == "A", Items <-0, 
                          ifelse(Store.Type == "C", Items <-0,Items)))
> df$Items[with(df, Store.Type == "A" | Store.Type == "C")] <- 0L
> df
#   Items Store.Type
# 1     0          A
# 2     4          B
# 3     0          C
# 4     6          D
# 5     3          B
# 6     7          E
df$Items <- with(df, ifelse(Store.Type == "A" | Store.Type == "C", 0L, Items))
within(df, Items <- ifelse(Store.Type == "A" | Store.Type == "C", 0L, Items))
 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
> ddf[ddf$Store.Type=='A'| ddf$Store.Type=='C',]$Items = 0
> ddf
  Items Store.Type
1     0          A
2     4          B
3     0          C
4     6          D
5     3          B
6     7          E
within(d, Items[Store.Type %in% c("A","C")]<-0)

  Items Store.Type
1     0          A
2     4          B
3     0          C
4     6          D
5     3          B
6     7          E
 Items Store.Type

1     0          A


2     4          B

3     0          C

4     6          D

5     3          B

6     7          E