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" 有条件地将列 [4:6] 替换为 NA。
例如:
i1 <- which(df$sport =="basket" & df$contract_start>="2014-01-01")
将索引所有满足我的条件的行。
是否有一段简单的代码可以添加到上面,在上述条件下将 df[4:6] 替换为 NA?
我想以这样的方式结束:
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.
您可以简单地指定要用 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)]
我有一个这样的数据框:
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" 有条件地将列 [4:6] 替换为 NA。 例如:
i1 <- which(df$sport =="basket" & df$contract_start>="2014-01-01")
将索引所有满足我的条件的行。 是否有一段简单的代码可以添加到上面,在上述条件下将 df[4:6] 替换为 NA? 我想以这样的方式结束:
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.
您可以简单地指定要用 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)]