我尝试scale
我的data
并使用新名称将其添加到原始数据中。我想知道为什么我的缩放数据没有分配给它的新名称?
以下是我的尝试:
data <- mtcars["wt"]
d <- scale(data)
data[, paste0(names(data), ".bbb") ] <- d
data
wt wt ## HERE 2nd column name has not changed I expect it to be "wt.bbb"
Mazda RX4 2.620 -0.610399567
Mazda RX4 Wag 2.875 -0.349785269
答案 0 :(得分:2)
因为d
是一个列已经有一个名称的矩阵,并且该名称胜出。您的修复方法几乎没有什么变化:
data[, paste0(names(data), ".bbb") ] <- d[, 1]
data[, paste0(names(data), ".bbb") ] <- as.numeric(d)
data[, paste0(names(data), ".bbb") ] <- as.vector(d)
data[, paste0(names(data), ".bbb") ] <- c(d)
答案 1 :(得分:1)
为什么不做呢
df <- mtcars
df$wt.bbb <- scale(df$wt)
答案 2 :(得分:0)
去看看?scale() - 你会看到你返回的不只是一个数字向量,而是一个矩阵。因此,你需要更多的东西来获得你想要的东西。
data <- mtcars["wt"]
scaled_matrix <- scale(data)
class(scaled_matrix)
scaled_values <- scaled_matrix[1:32]
class(scaled_values)
dplyr version
data %>%
mutate(your_name_here = d)
非dplyr版
df <- cbind(data, "your_name_here" = scaled_values)
答案 3 :(得分:0)
我想知道为什么我的缩放数据没有分配给它的新名称?
这是因为
class(d)
#R> [1] "matrix"
colnames(d)
#R> [1] "wt"
因此,你可以做到
data <- mtcars["wt"]
data[paste0(names(data), ".bbb")] <- unname(scale(data))
data
#R> wt wt.bbb
#R>Mazda RX4 2.620 -0.61040
#R>Mazda RX4 Wag 2.875 -0.34979
#R>Datsun 710 2.320 -0.91700
#R>Hornet 4 Drive 3.215 -0.00230
#C> [output abbreviated]
请参阅help("print.data.frame")
并使用包含列名称的矩阵调用format
。