【发布时间】:2019-05-15 01:57:58
【问题描述】:
我有一个包含 4 列的数据框。 C1、C2、C3、C4。
到我使用的这些列的子集 3;
myvars <- c("C1", "C2", "C3")
DF <- DF[myvars]
如果缺少 C1、C2 或 C3 之一,则会生成错误消息。
[.data.frame(All, myvars) 中的错误:选择了未定义的列
即使某些列不可用,我也希望进行子集化。所以它会至少对可用的列进行子集化。
【问题讨论】:
我有一个包含 4 列的数据框。 C1、C2、C3、C4。
到我使用的这些列的子集 3;
myvars <- c("C1", "C2", "C3")
DF <- DF[myvars]
如果缺少 C1、C2 或 C3 之一,则会生成错误消息。
[.data.frame(All, myvars) 中的错误:选择了未定义的列
即使某些列不可用,我也希望进行子集化。所以它会至少对可用的列进行子集化。
【问题讨论】:
我们可以使用intersect 来获取常用名称,然后根据它进行子集化。
my_subset <- function(df, vars) {
df[, intersect(names(df), vars)]
}
df1 <- data.frame(C1 = 1:4, C2 = 4:7, C3 = 10:13)
myvars <- c("C1", "C2", "C3", "C4")
my_subset(df1, myvars)
# C1 C2 C3
#1 1 4 10
#2 2 5 11
#3 3 6 12
#4 4 7 13
【讨论】: