我想用第一行数据更改列名。
我之前的帖子中的This solution适用于该部分。
OTH,在setNames
函数内部我想再添加一个级别来更改所选列的列名。
这是问题
df <- data.frame(replicate(10,sample(100,2,rep=TRUE)))
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 76 44 89 13 8 31 12 21 50 36
2 78 27 81 75 61 84 2 65 43 51
library(dplyr)
df1 <- df %>%
select(X1:X5)%>%
setNames(as.character(.[1,]))
给出了
> print(df1)
76 44 89 13 8
1 76 44 89 13 8
2 78 27 81 75 61
确定够了!但是我希望保留名称可以说X1,X2
和X3
,并且只能从X4更改为最大列数
所以我试试
df1 <- df %>%
select(X1:X5)%>%
setNames(as.character(.[1,X4:max(ncol(.))]))
[.data.frame
(。,1,X4:max(ncol(。)))中的错误:对象&#39; X4&#39;找不到
好吧我可能需要按编号
指定列位置df1 <- df %>%
select(X1:X5)%>%
setNames(as.character(.[1,4:max(ncol(.))]))
> print(df1)
13 8 NA NA NA
1 76 44 89 13 8
2 78 27 81 75 61
正如我们在这里看到的那样,名字发生了变化。即使我使用4:max(ncol(.))
为什么会这样? 任何帮助将不胜感激!
预期产量。 (我也想删除这个setName操作后的第一行)
X1 X2 X3 13 8
1 78 27 81 75 61
答案 0 :(得分:1)
这样可以解决问题:
require(tidyverse)
#Using your dataset
df <- data.frame(replicate(10,sample(100,2,rep=TRUE)))
df %>%
set_names(c(names(df)[1:3], as.character(.[1,])[4:10])) %>%
rownames_to_column("index") %>%
filter(index != 1 ) %>%
select(-index)
X1 X2 X3 16 56 51 11 21 61 37
1 43 15 75 38 70 20 63 70 53 79