在 R 中创建包含字符和运算符的向量
Creating a vector in R including characters and operators
我想在R中分配一个vector来写更少的代码并确保代码没有错误。
我想使用 subset()
函数排除观察结果 "obs 1", "obs 4", "obs 9"
等。但是,我想创建一个包含这些观察结果的向量,以便在 subset()
函数中使用。
示例 - 我希望它是这样的:
excluded <- column1!= "obs 1" & column1!= "obs 4" & column1!= "obs 9"
dataframe <- subset(dataframe, excluded)
示例 - 有效的方法和我想避免的方法
excluded <- column1!= "obs 1" & column1!= "obs 4" & column1!= "obs 9"
dataframe <- subset(dataframe, column1!= "obs 1" & column1!= "obs 4" & column1!= "obs 9")
c()
、list()
、两者的组合以及column1 <- "column1"
我都试过了。
提前致谢!
更新数据集示例。
set.seed(42)
n <- 12
dataframe <- data.frame(column1=as.character(factor(paste("obs",1:n))),rand=rep(LETTERS[1:2], n/2), x=rnorm(n))
dataframe
#output -first 5 rows:
column1 rand x
1 obs 1 A 1.37096
2 obs 2 B -0.56470
3 obs 3 A 0.36313
4 obs 4 B 0.63286
5 obs 5 A 0.40427
# load package
library(data.table)
# set as datatable
setDT(dataframe)
# put exclusion criteria into vector
y <- c("obs 1", "obs 4", "obs 9")
# subset
dataframe[!column1 %in% y]
您应该指定一个逻辑向量,然后使用它进行子集化。 %in%
运算符避免重复。
excluded <- c("obs 1", "obs 4", "obs 9")
subset(dataframe, !(dataframe$column1 %in% excluded))
# column1 rand x
# 2 obs 2 B -0.56469817
# 3 obs 3 A 0.36312841
# 5 obs 5 A 0.40426832
# 6 obs 6 B -0.10612452
# 7 obs 7 A 1.51152200
# 8 obs 8 B -0.09465904
# 10 obs 10 B -0.06271410
# 11 obs 11 A 1.30486965
# 12 obs 12 B 2.28664539
我想在R中分配一个vector来写更少的代码并确保代码没有错误。
我想使用 subset()
函数排除观察结果 "obs 1", "obs 4", "obs 9"
等。但是,我想创建一个包含这些观察结果的向量,以便在 subset()
函数中使用。
示例 - 我希望它是这样的:
excluded <- column1!= "obs 1" & column1!= "obs 4" & column1!= "obs 9"
dataframe <- subset(dataframe, excluded)
示例 - 有效的方法和我想避免的方法
excluded <- column1!= "obs 1" & column1!= "obs 4" & column1!= "obs 9"
dataframe <- subset(dataframe, column1!= "obs 1" & column1!= "obs 4" & column1!= "obs 9")
c()
、list()
、两者的组合以及column1 <- "column1"
我都试过了。
提前致谢!
更新数据集示例。
set.seed(42)
n <- 12
dataframe <- data.frame(column1=as.character(factor(paste("obs",1:n))),rand=rep(LETTERS[1:2], n/2), x=rnorm(n))
dataframe
#output -first 5 rows:
column1 rand x
1 obs 1 A 1.37096
2 obs 2 B -0.56470
3 obs 3 A 0.36313
4 obs 4 B 0.63286
5 obs 5 A 0.40427
# load package
library(data.table)
# set as datatable
setDT(dataframe)
# put exclusion criteria into vector
y <- c("obs 1", "obs 4", "obs 9")
# subset
dataframe[!column1 %in% y]
您应该指定一个逻辑向量,然后使用它进行子集化。 %in%
运算符避免重复。
excluded <- c("obs 1", "obs 4", "obs 9")
subset(dataframe, !(dataframe$column1 %in% excluded))
# column1 rand x
# 2 obs 2 B -0.56469817
# 3 obs 3 A 0.36312841
# 5 obs 5 A 0.40426832
# 6 obs 6 B -0.10612452
# 7 obs 7 A 1.51152200
# 8 obs 8 B -0.09465904
# 10 obs 10 B -0.06271410
# 11 obs 11 A 1.30486965
# 12 obs 12 B 2.28664539