使用R在宽数据中的列名中插入点
以下数据集为宽格式,重复测量ql、st和xy,前缀为a、b和c使用R在宽数据中的列名中插入点,r,dataframe,rename,gsub,R,Dataframe,Rename,Gsub,以下数据集为宽格式,重复测量ql、st和xy,前缀为a、b和c df<-data.frame(id=c(1,2,3,4), ex=c(1,0,0,1), aql=c(5,4,NA,6), bql=c(5,7,NA,9), cql=c(5,7,NA,9), bst=c(3,7,8,9), cst=c(8,7,5,3
df<-data.frame(id=c(1,2,3,4),
ex=c(1,0,0,1),
aql=c(5,4,NA,6),
bql=c(5,7,NA,9),
cql=c(5,7,NA,9),
bst=c(3,7,8,9),
cst=c(8,7,5,3),
axy=c(1,9,4,4),
cxy=c(5,3,1,4))
您还可以尝试使用tidyverse方法来重塑数据,如下所示:
library(tidyverse)
#Data
df<-data.frame(id=c(1,2,3,4),
ex=c(1,0,0,1),
aql=c(5,4,NA,6),
bql=c(5,7,NA,9),
cql=c(5,7,NA,9),
bst=c(3,7,8,9),
cst=c(8,7,5,3),
axy=c(1,9,4,4),
cxy=c(5,3,1,4))
#Reshape
df %>% pivot_longer(-c(1,2)) %>%
mutate(name=paste0(substring(name,1,1),'.',substring(name,2,nchar(name)))) %>%
pivot_wider(names_from = name,values_from=value)
输出:
# A tibble: 4 x 9
id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 5 5 5 3 8 1 5
2 2 0 4 7 7 7 7 9 3
3 3 0 NA NA NA 8 5 4 1
4 4 1 6 9 9 9 3 4 4
您还可以尝试使用tidyverse方法来重塑数据,如下所示:
library(tidyverse)
#Data
df<-data.frame(id=c(1,2,3,4),
ex=c(1,0,0,1),
aql=c(5,4,NA,6),
bql=c(5,7,NA,9),
cql=c(5,7,NA,9),
bst=c(3,7,8,9),
cst=c(8,7,5,3),
axy=c(1,9,4,4),
cxy=c(5,3,1,4))
#Reshape
df %>% pivot_longer(-c(1,2)) %>%
mutate(name=paste0(substring(name,1,1),'.',substring(name,2,nchar(name)))) %>%
pivot_wider(names_from = name,values_from=value)
输出:
# A tibble: 4 x 9
id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 5 5 5 3 8 1 5
2 2 0 4 7 7 7 7 9 3
3 3 0 NA NA NA 8 5 4 1
4 4 1 6 9 9 9 3 4 4
你能行
setNamesdf,subql$| st$| xy$,\\.\\1\\2\\3,namesdf
>id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
> 1 1 1 5 5 5 3 8 1 5
> 2 2 0 4 7 7 7 7 9 3
>3 3 0 NA NA 8 5 4 1
> 4 4 1 6 9 9 9 3 4 4
你能行
setNamesdf,subql$| st$| xy$,\\.\\1\\2\\3,namesdf
>id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
> 1 1 1 5 5 5 3 8 1 5
> 2 2 0 4 7 7 7 7 9 3
>3 3 0 NA NA 8 5 4 1
> 4 4 1 6 9 9 9 3 4 4
试一试
或
试一试
或
另一种方法你可以试试
library(dplyr)
df %>%
rename_at(vars(aql:cxy), ~ str_replace(., "(?<=\\w{1})", "\\."))
# id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
# 1 1 1 5 5 5 3 8 1 5
# 2 2 0 4 7 7 7 7 9 3
# 3 3 0 NA NA NA 8 5 4 1
# 4 4 1 6 9 9 9 3 4 4
另一种方法你可以试试
library(dplyr)
df %>%
rename_at(vars(aql:cxy), ~ str_replace(., "(?<=\\w{1})", "\\."))
# id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
# 1 1 1 5 5 5 3 8 1 5
# 2 2 0 4 7 7 7 7 9 3
# 3 3 0 NA NA NA 8 5 4 1
# 4 4 1 6 9 9 9 3 4 4
请尝试sub^[a-c].+,\\1。\\2,namedftry sub^[a-c].+,\\1。\\2,namedfthe.+仅在需要确保输入中至少有两个字符时才是必需的。如果没有必要,只需使用sub^[a-c],\\1.,namedfthe.+仅在需要确保输入中至少有两个字符时才有必要。如果没有必要,只需使用sub^[a-c],\\1.,namedf
library(dplyr)
df %>%
rename_at(vars(aql:cxy), ~ str_replace(., "(?<=\\w{1})", "\\."))
# id ex a.ql b.ql c.ql b.st c.st a.xy c.xy
# 1 1 1 5 5 5 3 8 1 5
# 2 2 0 4 7 7 7 7 9 3
# 3 3 0 NA NA NA 8 5 4 1
# 4 4 1 6 9 9 9 3 4 4