Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R在宽数据中的列名中插入点_R_Dataframe_Rename_Gsub - Fatal编程技术网

使用R在宽数据中的列名中插入点

使用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

以下数据集为宽格式,重复测量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),
               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