data.frame中的新列未获取R中为其分配的名称

时间:2018-03-17 21:06:10

标签: r dataframe

我尝试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

4 个答案:

答案 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