我按比例缩放了一个具有工作记忆容量得分的向量,如下所示:
data$memory_scaled = scale(data$memory_numeric, center=T, scale=T)
然后我想使用以下方法获取原始数据的子集:
data3 = filter(data, rt < 3000)
但是它给了我以下错误:
Error: Column `memory_scaled` must be a 1d atomic vector or a list
我已经读到问题是scale()函数添加了额外的参数。确实,当我执行summary(data)
时,变量名称的名称(memory_scaled.V1
)带有一个额外的“ V1”。有什么方法可以使用比例变量来避免这些问题?预先感谢。
答案 0 :(得分:1)
问题在于scale
返回的矩阵具有两个维度。
dat <- data.frame(col1 = 1:10)
dat$col2 <- scale(dat$col1)
lapply(dat, class)
#$col1
#[1] "integer"
#$col2
#[1] "matrix"
一种解决方法是这样
dat$col2 <- c(scale(dat$col1))
现在col2
是一个数字向量,即一维原子向量,dplyr::filter
可以正常工作
dplyr::filter(dat, col1 < 4)
# col1 col2
#1 1 -1.4863011
#2 2 -1.1560120
#3 3 -0.8257228