在阅读以下helpfile时,应该可以为列名称添加前缀:
colnames(x, do.NULL = TRUE, prefix = "col")
以下对我不起作用。我在这里做错了什么?
m2 <- cbind(1,1:4)
colnames(m2, do.NULL = FALSE)
colnames(m2) <- c("x","Y")
colnames(m2) <- colnames(m2, prefix = "Sub_")
colnames(m2)
答案 0 :(得分:73)
您误读了帮助文件。以下是要查看的论点:
do.NULL
:合乎逻辑。如果FALSE
和名称为NULL
,则会创建名称。
请注意该说明中的和。您的姓名不再是NULL
,因此使用前缀不起作用。
相反,请使用以下内容:
> m2 <- cbind(1,1:4)
> colnames(m2) <- c("x","Y")
> colnames(m2) <- paste("Sub", colnames(m2), sep = "_")
> m2
Sub_x Sub_Y
[1,] 1 1
[2,] 1 2
[3,] 1 3
[4,] 1 4
答案 1 :(得分:6)
更新的tidyverse
方法(带有dplyr 1.0.2
)使用rename_with()
,因为rename_all()
函数已被取代。
iris %>% rename_with( ~ paste("Sub", .x, sep = "_"))
答案 2 :(得分:2)
我将添加一个tidyverse
方法来解决此问题,您可以为所有列名称添加后缀和前缀。以下内容在dplyr
管道中添加了前缀。
df <- data.frame(x = c(1, 2), y = c(3, 4))
df %>% dplyr::rename_all(function(x) paste0("a", x))
添加后缀更加容易。
df %>% dplyr::rename_all(paste0, "a")
答案 3 :(得分:1)
stats::setNames
函数对此很好用,实际上比其他函数要快得多。
iris.dt <- data.table::as.data.table(iris)
microbenchmark::microbenchmark(
base = colnames(iris) <- paste("Sub", colnames(iris), sep = "_"),
stats = setNames(iris, paste("Sub", colnames(iris), sep = "_")),
dplyr = dplyr::rename_with(iris, ~ paste("Sub", .x, sep = "_")),
datatable = data.table::setnames(iris.dt, paste("Sub", names(iris.dt), sep = "_"))
)
#> Unit: microseconds
#> expr min lq mean median uq max neval cld
#> base 11.094 16.2140 21.62408 19.2010 23.681 65.707 100 a
#> stats 8.107 13.8670 17.40435 16.6405 19.841 39.254 100 a
#> dplyr 786.772 842.8785 5236.67222 877.0130 984.959 402378.407 100 a
#> datatable 40.961 49.9200 84.06237 62.2935 73.600 834.560 100 a
由reprex package(v0.3.0)于2020-10-21创建