从数据框中选择数字列和名称指定的一列

Cis*_*ska 6 r numeric scale

我有一个包含数字和非数字列的数据框,比方说

df <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20],v5=letters[1:20])
Run Code Online (Sandbox Code Playgroud)

要仅选择我将使用的非数字列

fixCol <- !sapply(df,is.numeric)
Run Code Online (Sandbox Code Playgroud)

但现在我还想要包含一个特定的数字列,比如说v2.我的数据框非常大,列的顺序发生了变化,因此我无法使用数字对其进行索引,我真的想使用名称"v2".我试过了

fixCol$v2 = TRUE
Run Code Online (Sandbox Code Playgroud)

但是这给了我警告In fixCol$FR = TRUE : Coercing LHS to a list,这使我无法将原始数据框子集化为仅获得fixCol

df[,fixCol]
Run Code Online (Sandbox Code Playgroud)

得到: Error in .subset(x, j) : invalid subscript type 'list'

最后,我的目标是缩放我的数据框的所有数字列,除了这一个指定的列,使用类似的东西

scaleCol = !fixCol
df_scaled = cbind(df[,fixCol], sapply(df[,scaleCol],scale))
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能做到最好?

akr*_*run 3

我们可以使用 OR 条件 ( |) 来获取逻辑索引,然后对 'df' 的列进行子集化。

df1 <- df[!sapply(df, is.numeric)|names(df)=='v2']
head(df1,2)
#  v2 v4 v5
#1  1  a  a
#2  2  b  b
Run Code Online (Sandbox Code Playgroud)