簡體   English   中英

R:用X而不是V重命名數據幀的列名

[英]R: renaming column names of dataframe with X and not V

我有這個簡單的代碼創建一個數據幀:

n = 5
p = 20
x=matrix(rnorm(n*p), nrow=n, ncol=p)
df=as.data.frame(x)

我得到了數據框的結果:

          V1         V2         V3         V4          V5          V6         V7         V8          V9        V10        V11         V12        V13        V14
1  1.8006821  0.2159150  0.2475421 -0.9591421 -0.05854140 -0.27782478 -0.5720555 -1.2093522 -1.34788746 -0.8452290 -1.5755013 -0.63180230  0.7267592  0.3079042
2 -1.2331962  0.3851325  0.7456002  0.6644699  0.43867770  0.52313129 -0.3429952  1.1231887 -0.78820594 -0.4749721 -1.1753511  0.44071083  0.5779413 -0.1477964
3 -1.3504110 -0.3694895  0.3419928  0.5078171 -0.88020980 -0.71862641  0.9641083 -2.7750092 -0.24178360 -0.1351366 -0.1801874 -0.08418993  0.7812341 -1.0273796
4 -0.3446066 -0.8032128 -0.7736583 -0.6863910  0.92667421 -0.06884001  0.5956594 -0.7848495 -0.09455081  0.3616341  0.3650726 -0.20903196 -0.8109611  0.2280463
5 -0.2685629 -0.8994275 -0.4956517 -1.0406881  0.01477389 -0.43855661 -0.5896001  0.1434798 -1.57407092  0.2337882  1.1170875  1.84402283  0.3901575  0.3403759
         V15        V16        V17         V18         V19         V20
1 -0.1450630 -0.7464377  1.3052135  0.29509627  0.09459443 -0.64872578
2 -0.5690047 -0.6694732 -0.1550677  0.15692547 -0.11672445 -0.07493947
3  0.3114352  1.4360456 -1.2353439  0.09812837 -0.66051299  1.00596707
4 -1.9778373 -0.6626688 -0.1474813 -0.41951635  0.80435969  0.40983722
5  0.1074216 -0.9764558  0.1439187 -0.51275394  0.44831639  1.18295229

有沒有辦法自動重命名數據框的列名? 而不是使用V1V2 ,...... V20X1X2 ...... X20

在colnames上使用sub()應該這樣做

colnames(df) <- sub("V", "X", colnames(df))

df[, 1:5]

#           X1         X2         X3         X4         X5
# 1 -1.3082368  0.1279402 -0.5617098 -0.5270066 -0.1255816
# 2  0.6039559  0.4957135 -0.6753756 -0.3299313  1.6700390
# 3 -1.9705086  0.3714967 -0.8691308 -0.9567827  0.2744300
# 4 -0.7793934 -0.7170730  1.0079133  0.4428833 -0.4107202
# 5 -0.7248188  0.6195181  1.6373108  0.2425697 -2.7285534

由於alistaire帶來了管道,這里有一種方法可以在管道中實現:

library(pipeR)

n = 5
p = 20
df <- matrix(rnorm(n*p), nrow=n, ncol=p) %>>% 
  as.data.frame %>>%
  "colnames<-"(sub("V", "X", colnames(.))) %>>%
  (? str(.))

這會有用嗎?

names(df) <- stringr::str_replace(names(df), 'V', 'X')

或者您是否正在尋找在as.data.frame調用中執行此操作的方法?

purrr::set_names可以使用匿名函數來應用名稱:

set.seed(47)
n = 5
p = 5
x = matrix(rnorm(n * p), nrow = n, ncol = p)
df = as.data.frame(x)

purrr::set_names(df, ~sub('V', 'X', .x))
#>           X1          X2          X3          X4         X5
#> 1  1.9946963 -1.08573747 -0.92245624  0.67077922 -1.5661621
#> 2  0.7111425 -0.98548216  0.03960243 -0.08107805  0.2491482
#> 3  0.1854053  0.01513086  0.49382018  1.26424109 -0.3404160
#> 4 -0.2817650 -0.25204590 -1.82822917 -0.70338819  0.4171908
#> 5  0.1087755 -1.46575030  0.09147291 -0.04057817 -0.3264668

它特別方便中途管道。

暫無
暫無

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

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