2016-07-25 75 views
4

我有一个数据帧,像这样:R:有条件地替换在列的子集的值

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 

我想有条件地取代的列[4:6]的NA,基于变量“运动”和“合同开始”。 因此,例如:

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

意愿指数中,我的条件得到满足的所有行。 是否有一段简单的代码添加到上面,在给定上述条件的情况下,将用NA替换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 

谢谢! A.

回答

6

你可以简单地指定的行和列,你想用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 
+0

谢谢,正是我想要的。 –

3
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)]