簡體   English   中英

R 中 dataframe 中新變量的重命名和重新編碼范圍

[英]Rename and recode range of new variables in dataframe in R

我本質上想要重新編碼和重命名 dataframe 中的一系列變量。 我正在尋找一種方法來一步完成。

偽代碼示例:

require(dplyr)

df <- iris %>% head()

df %>% mutate(
   paste0("x", 1:3) = across(       # In the example I want to rename 
      Sepal.Length:Petal.Length,    # the variables I've selected
      ~ .x + 1                      # and recoded to "x1" ... "x5"
   )
)
df

所需的 output:

     x1    x2    x3 Petal.Width Species
  <dbl> <dbl> <dbl>       <dbl>   <fct>
1   5.1   3.5   1.4         0.2  setosa
2   4.9   3.0   1.4         0.2  setosa
3   4.7   3.2   1.3         0.2  setosa
4   4.6   3.1   1.5         0.2  setosa
5   5.0   3.6   1.4         0.2  setosa
6   5.4   3.9   1.7         0.4  setosa

也許rename_with()是你想要的。 之后,您可以使用mutate(across(...))操作這些重命名的列。

library(dplyr)

df %>%
  rename_with(~ paste0("x", seq_along(.x)), Sepal.Length:Petal.Length) %>%
  mutate(across(x1:x3, ~ .x * 10))

  x1 x2 x3 Petal.Width Species
1 51 35 14         0.2  setosa
2 49 30 14         0.2  setosa
3 47 32 13         0.2  setosa
4 46 31 15         0.2  setosa
5 50 36 14         0.2  setosa
6 54 39 17         0.4  setosa

如果您想在一個步驟中操作和重命名一系列列,請嘗試使用 cross across()中的參數.names

df %>%
  mutate(across(Sepal.Length:Petal.Length, ~ .x * 10,
                .names = "x{seq_along(.col)}"),
         .keep = "unused", .after = 1)

  x1 x2 x3 Petal.Width Species
1 51 35 14         0.2  setosa
2 49 30 14         0.2  setosa
3 47 32 13         0.2  setosa
4 46 31 15         0.2  setosa
5 50 36 14         0.2  setosa
6 54 39 17         0.4  setosa

提示:您可以使用seq_along()來創建序列 1, 2, ... 以及所選列,或match()來獲取所選列在數據中的位置,即
.names = "x{match(.col, names(df))}"

下面的代碼允許您將列號輸入到 for 循環中,不確定這是否是您想要的。

require(dplyr)

df <- iris %>% head()


for(i in 1:3){
  names(df)[i] <- paste0("x",i)
}

df

輸出:

   x1  x2  x3 Petal.Width Species
1 5.1 3.5 1.4         0.2  setosa
2 4.9 3.0 1.4         0.2  setosa
3 4.7 3.2 1.3         0.2  setosa
4 4.6 3.1 1.5         0.2  setosa
5 5.0 3.6 1.4         0.2  setosa
6 5.4 3.9 1.7         0.4  setosa

您可以通過這種方式將連續數字添加到具有相同前綴的n列:

df <- iris %>% head()

n <- 3
colnames(df)[1:n] <- sprintf("x%s",1:n)

output:

# x1  x2  x3 Petal.Width Species
# 1 5.1 3.5 1.4         0.2  setosa
# 2 4.9 3.0 1.4         0.2  setosa
# 3 4.7 3.2 1.3         0.2  setosa
# 4 4.6 3.1 1.5         0.2  setosa
# 5 5.0 3.6 1.4         0.2  setosa
# 6 5.4 3.9 1.7         0.4  setosa

在任何不連續的列數中:

n <- c(1,3,5)
colnames(df)[n] <- sprintf("x%s",n)

#   x1 Sepal.Width  x3  Petal.Width     x5
# 1 5.1         3.5 1.4         0.2 setosa
# 2 4.9         3.0 1.4         0.2 setosa
# 3 4.7         3.2 1.3         0.2 setosa
# 4 4.6         3.1 1.5         0.2 setosa
# 5 5.0         3.6 1.4         0.2 setosa
# 6 5.4         3.9 1.7         0.4 setosa

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM