簡體   English   中英

r:有條件地替換列子集中的值

[英]r: conditionally replace values in a subset of columns

我有一個像這樣的數據幀:

sport   contract start contract end visits spends purchases
basket   2013-10-01     2014-10-01   12      14      23
basket   2014-02-12     2015-03-03   23      11      7
football 2015-02-12     2016-03-03   23      11      7
basket   2016-07-17     2013-09-09   12       7      13

我想根據變量“sport”和“contract start”有條件地用NAs替換列[4:6]。 例如:

i1 <- which(df$sport =="basket" & df$contract_start>="2014-01-01")

將索引滿足條件的所有行。 是否有一個簡單的代碼可以添加到上面,在給定上述條件的情況下,將用NAs替換df [4:6]? 我想最終得到類似的東西:

sport   contract start contract end visits spends purchases
basket   2013-10-01     2014-10-01   12      14      23
basket   2014-02-12     2015-03-03   NA      NA      NA
football 2015-02-12     2016-03-03   23      11      7
basket   2016-07-17     2013-09-09   NA      NA      NA

謝謝! 一種。

您只需指定要用NA替換的行和列,並為其指定NA

df[df$sport =="basket" & df$contract_start>="2014-01-01", 4:6] <- NA

df
#      sport contract_start contract_end visits spends purchases
# 1   basket     2013-10-01   2014-10-01     12     14        23
# 2   basket     2014-02-12   2015-03-03     NA     NA        NA
# 3 football     2015-02-12   2016-03-03     23     11         7
# 4   basket     2016-07-17   2013-09-09     NA     NA        NA
library("data.table")
setDT(df)
df[i = sport == "basket" & contract_start >= "2014-01-01", 
   j = c("visits", "spends", "purchases") := NA]

> df
      sport contract_start contract_end visits spends purchases
1:   basket     2013-10-01   2014-10-01     12     14        23
2:   basket     2014-02-12   2015-03-03     NA     NA        NA
3: football     2015-02-12   2016-03-03     23     11         7
4:   basket     2016-07-17   2013-09-09     NA     NA        NA

使用my_cols變量的上述代碼的變體:

my_cols <- names(df)[4:6]
df[i = sport == "basket" & contract_start >= "2014-01-01", 
   j = (my_cols) := .(NA)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM