How to change the first row to be the header in R?
I have the following table:
X.5 X.6 X.7 X.8 X.9 X.10 X.11 X.12 X.13
17 Zip CuCurrent PaCurrent PoCurrent Contact Ext Fax email Status
18 74136 0 1 0 918-491-6998 0 918-491-6659 1
19 30329 1 0 0 404-321-5711 1
20 74136 1 0 0 918-523-2516 0 918-523-2522 1
21 80203 0 1 0 303-864-1919 0 1
22 80120 1 0 0 345-098-8890 456 1
how can make the first row 'zip, cucurrent, pacurrent...' to be the column header?
Thanks,
below is dput(dat)
structure(list(X.5 = structure(c(26L, 14L, 6L, 14L, 17L, 16L), .Label = c("",
"1104", "1234 I don't know Ave.", "139.98", "300 Morgan St.",
"30329", "312.95", "4101 S. 4th Street, Traff", "500 Highway 89 North",
"644.04", "656.73", "72160", "72336-7000", "74136", "75501",
"80120", "80203", "877.87", "Address1", "BZip", "General Svcs Admin (WPY)",
"InvFileName2", "LDC_Org_Cost", "N/A", "NULL", "Zip"), class = "factor"),
X.6 = structure(c(7L, 2L, 3L, 3L, 2L, 3L), .Label = c("",
"0", "1", "301 7th St. SW", "800-688-6160", "Address2", "CuCurrent",
"Emergency", "LDC_Cost_Adj", "Mtelemetry", "N/A", "NULL",
"Suite 1402"), class = "factor"), X.7 = structure(c(8L, 3L,
2L, 2L, 3L, 2L), .Label = c("", "0", "1", "Address3", "Cucustomer",
"LDC_Misc_Fee", "NULL", "PaCurrent", "Room 7512"), class = "factor"),
X.8 = structure(c(14L, 2L, 2L, 2L, 2L, 2L), .Label = c("",
"0", "100.98", "237.02", "242.33", "335.04", "50.6", "City",
"Durham", "LDC_FinalVolume", "Leavenwoth", "Pacustomer",
"Petersburg", "PoCurrent", "Prescott", "Washington"), class = "factor"),
X.9 = structure(c(18L, 16L, 10L, 17L, 7L, 9L), .Label = c("",
"0", "1", "139.98", "20024", "27701", "303-864-1919", "312.95",
"345-098-8890", "404-321-5711", "644.04", "656.73", "66048",
"86313", "877.87", "918-491-6998", "918-523-2516", "Contact",
"LDC_FinalCost", "PoCustomer", "Zip"), class = "factor"),
X.10 = structure(c(14L, 2L, 1L, 2L, 2L, 9L), .Label = c("",
"0", "2.620194604", "2.710064788", "2.717239052", "2.766403162",
"202-708-4995", "3.09912854", "456", "804-504-7200", "913-682-2000",
"919-956-5541", "928-717-7472", "Ext", "InvoicesNeeded",
"LDC_UnitPrice", "NULL", "Phone"), class = "factor"), X.11 = structure(c(7L,
4L, 1L, 5L, 1L, 1L), .Label = c("", " ", "1067", "918-491-6659",
"918-523-2522", "Ext", "Fax", "InvoiceMonths", "LDC_UnitPrice_Original",
"NULL", "x2951"), class = "factor"), X.12 = structure(c(13L,
1L, 1L, 1L, 1L, 1L), .Label = c("", "0", "100.98", "202-401-3722",
"237.02", "242.33", "335.04", "50.6", "716- 344-3303", "804-504-7227",
"913- 758-4230", "919- 956-7152", "email", "Fax", "GSA",
"Supp_Vol"), class = "factor"), X.13 = structure(c(10L, 2L,
2L, 2L, 2L, 2L), .Label = c("", "1", "15", "202-497-6164",
"3", "804-504-7200", "Emergency", "MajorTypeId", "NULL",
"Status", "Supp_Vol_Adj"), class = "factor")), .Names = c("X.5",
"X.6", "X.7", "X.8", "X.9", "X.10", "X.11", "X.12", "X.13"), row.names = 17:22, class = "data.frame")
If you don't want to re-read the data into R (which it seems like you don't from the comments), you can do the following. I had to add some zeros to get your data to read completely, so disregard those.
dat
## V2 V3 V4 V5 V6 V7 V8 V9 V10
## 17 Zip CuCurrent PaCurrent PoCurrent Contact Ext Fax email Status
## 18 74136 0 1 0 918-491-6998 0 918-491-6659 0 1
## 19 30329 1 0 0 404-321-5711 0 0 0 1
## 20 74136 1 0 0 918-523-2516 0 918-523-2522 0 1
## 21 80203 0 1 0 303-864-1919 0 0 0 1
## 22 80120 1 0 0 345-098-8890 456 0 0 1
First take the first row as the column names. Next remove the first row. Finish it off by converting the columns to their appropriate types.
names(dat) <- as.matrix(dat[1, ])
dat <- dat[-1, ]
dat[] <- lapply(dat, function(x) type.convert(as.character(x)))
dat
## Zip CuCurrent PaCurrent PoCurrent Contact Ext Fax email Status
## 1 74136 0 1 0 918-491-6998 0 918-491-6659 0 1
## 2 30329 1 0 0 404-321-5711 0 0 0 1
## 3 74136 1 0 0 918-523-2516 0 918-523-2522 0 1
## 4 80203 0 1 0 303-864-1919 0 0 0 1
## 5 80120 1 0 0 345-098-8890 456 0 0 1
This could be in a simple way :
step 1: Copy 1st row to header:
names(dat) <- dat[1,]
step 2: Delete 1st row :
dat <- dat[-1,]
The cleanest way to do this is a simple function already designed for this purpose. You need janitor package.
janitor::row_to_names(dat)
If you want the nth row to be used for column names the second parameter of the function is the row number to be used. The default is 1.