[英]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.