While rbinding the all small tables, names of data frame having extentention ".x" , ".y" , ".xX", ".yY" etc. but I want to keep the same name in dataframe.
For example in my data frame below I want to keep the same column name "names" in data frame.
data <- data.frame(part=c("DD","MM","TT"),
Team1 = c("kamal", "vimal", "shamal"),
"names.x" = c(45,23,35),
Team2 = c("kamal", "vimal", "shamal"),
"names.y" = c(46,24,36),
Team3 = c("kamal", "vimal", "shamal"),
"names.x.x" = c(47,25,37),
Team2 = c("kamal", "vimal", "shamal"),
"names.y.y" = c(48,26,38),
age = c(45,23,35),
weight = c(50,34,42))
Required output should be look like below
You can use sub
to only keep "names", then setNames
to change the column names.
setNames(data, sub("(names).*", "\\1", colnames(data)))
part Team1 names Team2 names Team3 names Team2.1 names age weight
1 DD kamal 45 kamal 46 kamal 47 kamal 48 45 50
2 MM vimal 23 vimal 24 vimal 25 vimal 26 23 34
3 TT shamal 35 shamal 36 shamal 37 shamal 38 35 42
Or remove anything after a dot .
.
setNames(data, sub("\\..*", "", colnames(data)))
Another way of doing it is to use the colnames(data) <-
syntax, which will immediately replace the column names in data
(use with caution).
colnames(data) <- sub("\\..*", "", colnames(data))
part Team1 names Team2 names Team3 names Team2 names age weight
1 DD kamal 45 kamal 46 kamal 47 kamal 48 45 50
2 MM vimal 23 vimal 24 vimal 25 vimal 26 23 34
3 TT shamal 35 shamal 36 shamal 37 shamal 38 35 42
To combine names
with sequential numbers, do:
colnames(data)[grepl("names", colnames(data))] <- paste0("names", seq_len(sum(grepl("names", colnames(data)))))
part Team1 names1 Team2 names2 Team3 names3 Team2.1 names4 age weight
1 DD kamal 45 kamal 46 kamal 47 kamal 48 45 50
2 MM vimal 23 vimal 24 vimal 25 vimal 26 23 34
3 TT shamal 35 shamal 36 shamal 37 shamal 38 35 42