select 个数字列和一个由数据框中的名称指定的列
select numeric columns and one column specified by name from data frame
我有一个包含数字列和非数字列的数据框,比方说
df <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20],v5=letters[1:20])
到 select 只有我会使用的非数字列
fixCol <- !sapply(df,is.numeric)
但现在我还想包括一个特定的数字列,比如 v2。我的数据框很大,列的顺序改变了,所以我不能用数字索引它,我真的想用名字'v2'。我试过了
fixCol$v2 = TRUE
但这给了我警告 In fixCol$FR = TRUE : Coercing LHS to a list
这使得我无法对原始数据框进行子集化以仅获取 fixCol
df[,fixCol]
给出:Error in .subset(x, j) : invalid subscript type 'list'
最后我的目标是缩放我的数据框的所有数字列,除了这个指定的列,使用类似这样的东西
scaleCol = !fixCol
df_scaled = cbind(df[,fixCol], sapply(df[,scaleCol],scale))
我怎样才能最好地做到这一点?
我们可以使用 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
fixCol <- !sapply(df,is.numeric)
fixCol <- df[, fixCol]
fixCol$v2 <- df[colnames(df)=="v2"]
head(fixCol)
# v4 v5 v2
#1 a a 1
#2 b b 2
#3 c c 3
#4 d d 4
#5 e e 5
#6 f f 6
我有一个包含数字列和非数字列的数据框,比方说
df <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20],v5=letters[1:20])
到 select 只有我会使用的非数字列
fixCol <- !sapply(df,is.numeric)
但现在我还想包括一个特定的数字列,比如 v2。我的数据框很大,列的顺序改变了,所以我不能用数字索引它,我真的想用名字'v2'。我试过了
fixCol$v2 = TRUE
但这给了我警告 In fixCol$FR = TRUE : Coercing LHS to a list
这使得我无法对原始数据框进行子集化以仅获取 fixCol
df[,fixCol]
给出:Error in .subset(x, j) : invalid subscript type 'list'
最后我的目标是缩放我的数据框的所有数字列,除了这个指定的列,使用类似这样的东西
scaleCol = !fixCol
df_scaled = cbind(df[,fixCol], sapply(df[,scaleCol],scale))
我怎样才能最好地做到这一点?
我们可以使用 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
fixCol <- !sapply(df,is.numeric)
fixCol <- df[, fixCol]
fixCol$v2 <- df[colnames(df)=="v2"]
head(fixCol)
# v4 v5 v2
#1 a a 1
#2 b b 2
#3 c c 3
#4 d d 4
#5 e e 5
#6 f f 6