簡體   English   中英

如何在R中重命名dataframe?

[英]How to rename dataframe in R?

假設我有兩個數據框, dmsuppdm

test <- function(inds) {
    a1 <- inds
    a2 <- paste("supp", a1, sep = '')
    
    print(class(a1))
    print(class(a2))
}

test(dm)

此時a1dm數據框,但a2不是suppdm ,只是字符。 如何輸入一個參數並使用兩個數據框? 這是否屬於數據框的重命名?


PS:R function 好像很難傳參。

您必須使用assign創建一個名稱為字符串的 object,然后使用get獲取該字符串給出的 object。
請注意,前綴為"supp"的名稱將僅存在於 function 中,並在退出時被丟棄。

test <- function(inds){
  a1 <- deparse(substitute(inds))
  a2 <- paste0("supp", a1)
  assign(a2, inds)
  out_df <- get(a2)
  
  print(class(a1))
  print(class(a2))
  print(class(out_df))
  
  out_df
}

head(test(iris))
#> [1] "character"
#> [1] "character"
#> [1] "data.frame"
#>   Sepal.Length Sepal.Width Petal.Length 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

reprex package (v2.0.1) 創建於 2022-03-23

一個可能有趣的替代方法是使用gdata package 中可用的mv function:

library("gdata")
dfA <- data.frame(colA = c(1,2), colB = c(3,4))
ls()
# [1] "dfA"
# to: argument takes any string so conveniently it can be used 
#     with usual string manipulation functions
mv(from = "dfA", to = paste0("df", "B"))
ls()
# "dfB"

筆記

  • 關於您的觀察:

    PS: R function 好像很難傳參

    這取決於個人的觀點,R 可能被認為更容易或更具挑戰性,具體取決於開發人員的背景、經驗水平等。我認為這是一個更長的對話主題。

  • mvgdata中提供,使用assign ,類似於@Rui Barradas提供的有效答案,另外還提供了一些其他用於參數檢查和可選目標環境的小工具。 依賴這個 package 來完成這個次要任務是否有意義主要取決於處理依賴關系的品味/方法。

暫無
暫無

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

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