R在旋转时切换字符串的第一部分和第二部分

R在旋转时切换字符串的第一部分和第二部分,r,R,我有一个带有列的data.frame: names(data) = ("newid","Player.WR","data_col.WR","Trend.WR","Player.QB","data_col.QB","Trend.QB","Player.RB","data_col.RB","Trend.RB&qu

我有一个带有列的data.frame:

names(data) = ("newid","Player.WR","data_col.WR","Trend.WR","Player.QB","data_col.QB","Trend.QB","Player.RB","data_col.RB","Trend.RB","Player.TE","data_col.TE","Trend.TE" )
但是,我需要在句点处翻转每个名称的第一和第二部分,使其看起来像这样:

名称(数据)=(“newid”、“WR.Player”、“WR.data\u col”、“WR.Trend”、“QB.Player”、“QB.data\u col”、“QB.Trend”、“RB.Player”、“RB.Trend”、“TE.Player”、“TE.data\u col”、“TE.Trend”

我最初的想法是尝试执行
strsplit
,然后以某种方式执行
lappy
语句来重新排序,但我不确定如何使
lappy
工作


谢谢

我建议下一种方法使用函数交换值的位置和
lappy()


最后的输出可以保存在一个新的向量中,如
vecnamesnew,我建议下一种方法是使用函数交换值的位置和
lappy()


最后一个输出可以保存在一个新的向量中,如
vecnamesnew和一个名为
v
的向量,您还可以尝试:

v <- c("newid","Player.WR","data_col.WR","Trend.WR",
         "Player.QB","data_col.QB","Trend.QB","Player.RB",
         "data_col.RB","Trend.RB","Player.TE","data_col.TE","Trend.TE")

gsub(
  '(.*)\\.(.*)',
  '\\2\\.\\1',
  v
)
并将其直接分配给名称:

names(data) <- gsub('(.*)\\.(.*)', '\\2\\.\\1', v)

名称(数据)使用名称向量
v
,您还可以尝试:

v <- c("newid","Player.WR","data_col.WR","Trend.WR",
         "Player.QB","data_col.QB","Trend.QB","Player.RB",
         "data_col.RB","Trend.RB","Player.TE","data_col.TE","Trend.TE")

gsub(
  '(.*)\\.(.*)',
  '\\2\\.\\1',
  v
)
并将其直接分配给名称:

names(data) <- gsub('(.*)\\.(.*)', '\\2\\.\\1', v)

names(data)Arg0naut91的答案非常简洁,我建议使用Arg0naut91的方法。但是,为了使用
strsplit
lapply
提供(某种程度上)简洁的解决方案,对于那些不熟悉gsub语法的人来说,(可能)可读性更强,我提交以下内容:

names<-c("newid","Player.WR","data_col.WR","Trend.WR",
         "Player.QB","data_col.QB","Trend.QB","Player.RB",
         "data_col.RB","Trend.RB","Player.TE","data_col.TE","Trend.TE" )

newnames<-lapply(names,function(x) paste(rev(unlist(strsplit(x,split="\\."),use.names=FALSE)),collapse="."))
print(newnames)

作为输出。

Arg0naut91的答案非常简洁,我建议使用Arg0naut91的方法。但是,为了使用
strsplit
lapply
提供(某种程度上)简洁的解决方案,对于那些不熟悉gsub语法的人来说,(可能)可读性更强,我提交以下内容:

names<-c("newid","Player.WR","data_col.WR","Trend.WR",
         "Player.QB","data_col.QB","Trend.QB","Player.RB",
         "data_col.RB","Trend.RB","Player.TE","data_col.TE","Trend.TE" )

newnames<-lapply(names,function(x) paste(rev(unlist(strsplit(x,split="\\."),use.names=FALSE)),collapse="."))
print(newnames)
作为输出

 [1] "newid"       "WR.Player"   "WR.data_col" "WR.Trend"    "QB.Player"   "QB.data_col" "QB.Trend"   
 [8] "RB.Player"   "RB.data_col" "RB.Trend"    "TE.Player"   "TE.data_col" "TE.Trend"