R:根据特定规则重塑数据帧

李维

这是带有这些列的以下数据框

名称(local_data)

  [1] "Frame"          "Time..Seconds." "X"              "Y"              "Z"              "W"              "X.1"           
  [8] "Y.1"            "Z.1"            "X.33"           "X.2"            "Y.2"            "Z.2"            "X.34"          
 [15] "X.3"            "Y.3"            "Z.3"            "X.35"           "X.4"            "Y.4"            "Z.4"           
 [22] "X.36"           "X.5"            "Y.5"            "Z.5"            "X.6"            "Y.6"            "Z.6"           
 [29] "X.7"            "Y.7"            "Z.7"            "X.8"            "Y.8"            "Z.8"            "X.9"           
 [36] "Y.9"            "Z.9"            "X.10"           "Y.10"           "Z.10"           "X.11"           "Y.11"          
 [43] "Z.11"           "X.12"           "Y.12"           "Z.12"           "X.13"           "Y.13"           "Z.13"          
 [50] "X.14"           "Y.14"           "Z.14"           "X.15"           "Y.15"           "Z.15"           "X.16"          
 [57] "Y.16"           "Z.16"           "X.17"           "Y.17"           "Z.17"           "X.18"           "Y.18"          
 [64] "Z.18"           "X.19"           "Y.19"           "Z.19"           "X.20"           "Y.20"           "Z.20"          
 [71] "X.21"           "Y.21"           "Z.21"           "X.22"           "Y.22"           "Z.22"           "X.23"          
 [78] "Y.23"           "Z.23"           "X.24"           "Y.24"           "Z.24"           "X.25"           "Y.25"          
 [85] "Z.25"           "X.26"           "Y.26"           "Z.26"           "X.27"           "Y.27"           "Z.27"          
 [92] "X.28"           "Y.28"           "Z.28"           "X.29"           "Y.29"           "Z.29"           "X.30"          
 [99] "Y.30"           "Z.30"           "X.31"           "Y.31"           "Z.31"           "X.32"           "Y.32"          
[106] "Z.32"     

我想将所有X,Y,Z列合并在一起。

我可以像这样选择所有X,Y和Z列名称:

Xpos <- c(2, grep(glob2rx("X*"), names(local_data)))

我可以像这样合并这些选定的列:

df.x <- local_data[,Xpos] %>% gather(key, xpox, 2:length(Xpos))

问题是有一些松散的X列没有对应的Y和Z列。例如,X.33

我正在寻找一种基于矢量的优雅代码,以标识具有相应Y和X列的X列。从概念上讲,我认为最简单的方法是查找具有相同编号的列,例如X.10,Y.10,Z.10。有小费吗?

谢谢,

马克斯·特氟隆

这是您要搜索的吗?我尽力整理一下。

library(tidyverse)
# generate test set
names(local_data) <- local_data <- paste0(sample(c('X','Y','Z'),100,T),'.',sample(1:100,100,T))

# generate logical column index
idx <- names(local_data) %>% substr(.,3,nchar(.)) %>%  
  is.element(.,names(table(.)[table(.)==3])) & grepl('X',names(local_data))

# test the result
names(local_data)
#>   [1] "Y.48"  "Y.45"  "X.31"  "Y.13"  "X.67"  "Z.85"  "X.1"   "Z.18" 
#>   [9] "X.40"  "Z.50"  "Y.51"  "X.86"  "X.60"  "Y.8"   "X.23"  "Y.16" 
#>  [17] "X.6"   "X.11"  "Z.38"  "X.93"  "Z.7"   "Z.21"  "Z.41"  "X.19" 
#>  [25] "Z.37"  "Z.88"  "Y.100" "Z.65"  "Y.37"  "Z.65"  "Y.27"  "Y.13" 
#>  [33] "X.88"  "Y.7"   "X.88"  "X.30"  "X.41"  "Y.15"  "Y.59"  "Y.94" 
#>  [41] "Y.47"  "Z.4"   "X.40"  "Z.43"  "X.47"  "X.31"  "Z.38"  "Y.35" 
#>  [49] "Z.64"  "Z.64"  "Z.27"  "X.4"   "X.30"  "Z.4"   "X.97"  "X.90" 
#>  [57] "Y.47"  "Y.75"  "Z.12"  "X.92"  "Z.8"   "Y.33"  "Z.43"  "Z.95" 
#>  [65] "X.74"  "Y.55"  "Y.61"  "X.91"  "Z.37"  "X.95"  "Y.1"   "Y.56" 
#>  [73] "X.82"  "Y.25"  "Z.45"  "Y.66"  "X.81"  "Z.17"  "X.76"  "X.57" 
#>  [81] "Z.60"  "Y.31"  "X.22"  "X.55"  "Y.2"   "Y.35"  "Z.1"   "Y.12" 
#>  [89] "Z.59"  "Z.58"  "X.100" "Z.91"  "X.33"  "Y.42"  "Y.16"  "X.100"
#>  [97] "X.41"  "X.2"   "X.64"  "Y.92"
names(local_data)[idx]
#>  [1] "X.31"  "X.1"   "X.88"  "X.88"  "X.41"  "X.47"  "X.31"  "X.4"  
#>  [9] "X.100" "X.100" "X.41"  "X.64"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章