我正在尝试将第一行设置为数据中的列名,但是我的数据由许多因素组成,这会引起一些问题。
我正在尝试使用Str()
软件包来完成此操作。
'data.frame': 2 obs. of 8 variables:
$ 1 : Factor w/ 2045 levels " 200039"," 200171",..: 2045 1
$ 2 : Factor w/ 3 levels " DR"," GR"," OU": 3 2
$ 1372: Factor w/ 1388 levels " 12"," 15",..: 1388 1372
$ 4 : Factor w/ 51 levels " ATLANTA ",..: 21 4
$ NA : logi NA NA
$ 63 : Factor w/ 498 levels " 435"," 436",..: 498 63
$ 95 : Factor w/ 264 levels " 1114"," 1115",..: 264 95
$ 118 : Factor w/ 132 levels " Chain1 "," Chain10 ",..: 131 118
的数据:
x <- df %>%
setNames(df[1, ])
我正在使用以下代码
2045 3 1388 21 NA 498 264 131
1 IRI_KEY OU EST_ACV Market_Name NA Open Clsd MskdName
2 200039 GR 9.709999 BUFFALO/ROCHESTER NA 539 1219 Chain87
哪个给我以下输出:
IRI_KEY
但是我想用OU
,EST_ACV
,dplyr
等作为列名。
我尝试使用V5
完成此操作,因为我将删除第一行并删除NA
列的head()
。
我会提供数据,但数据会使用各种因素,因此对于SO而言,数据太大。我提供了前5个结果中的 V1 V2 V3 V4 V5 V6 V7 V8
1 IRI_KEY OU EST_ACV Market_Name NA Open Clsd MskdName
2 200039 GR 9.709999 BUFFALO/ROCHESTER NA 539 1219 Chain87
3 200171 GR 27.69099 MILWAUKEE NA 522 9998 Chain97
4 200197 GR 11.14 PEORIA/SPRINGFLD. NA 903 9998 Chain59
5 200233 GR 7.514999 OKLAHOMA CITY NA 1122 1150 Chain102
。
dput()
编辑:我在这里上传了一些{{1}}
答案 0 :(得分:1)
您可以尝试
library(purrr)
library(dplyr)
names <- sapply(df[1, setdiff(names(df), "V5")], as.character)
df %>%
select(-V5) %>%
set_names(., nm = names) %>%
.[-1, ]
# IRI_KEY OU EST_ACV Market_Name Open Clsd MskdName
#2 200039 GR 9.709999 BUFFALO/ROCHESTER 539 1219 Chain87
#3 200171 GR 27.69099 MILWAUKEE 522 9998 Chain97
#4 200197 GR 11.14 PEORIA/SPRINGFLD. 903 9998 Chain59
#5 200233 GR 7.514999 OKLAHOMA CITY 1122 1150 Chain102
提取除列V5
之外的第一行并转换为字符。在管道中,首先排除列V5
,然后更改列名称并删除第一行。
数据
df <- read.table(text = " V1 V2 V3 V4 V5 V6 V7 V8
IRI_KEY OU EST_ACV Market_Name NA Open Clsd MskdName
200039 GR 9.709999 BUFFALO/ROCHESTER NA 539 1219 Chain87
200171 GR 27.69099 MILWAUKEE NA 522 9998 Chain97
200197 GR 11.14 PEORIA/SPRINGFLD. NA 903 9998 Chain59
200233 GR 7.514999 'OKLAHOMA CITY' NA 1122 1150 Chain102", header = TRUE)