我有一个包含数字和非数字列的数据帧指定数值列一列,说按名称选择从数据帧
df <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20],v5=letters[1:20])
只选择非数字列,我会用
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))
我该如何做到最好?
这个很好,谢谢!我如何使df2包含所有不放入df1的列,而不反转整个sapply语句?我试过df2 < - df [,!names(df1)]或df2 < - df [, - c(names(df1))]但都出错。 我也需要df2,以便能够缩放df2并将其与df1一起放入新的数据框中。 – Ciska
@Ciska我们可以使用'setdiff'或'%in%',即'df2 < - df [setdiff(names(df),names(df1))]' – akrun
Thanks @akrun!这工作很好 – Ciska