R 分组时将数字用作列名

R 分组时将数字用作列名,r,R,这是我的样本数据 mydata<-structure(list(x1 = c(0, 8.6, 11.2, 8.4, 0, 0), x2 = c(0, 0, 7.8, 7.6, 1.2, 10.2), y1 = c(0, 0, 3.4, 21.4, 1.8, 1.4), y2 = c(7.8, 7.6, 1.2, 10.2, 7, 0), z1 = c(0, 1.6, 7.6, 23.6, 3.2, 0), z2 = c(8.6, 1.4, 0, 0, 0, 0)), .Names =

这是我的样本数据

mydata<-structure(list(x1 = c(0, 8.6, 11.2, 8.4, 0, 0), x2 = c(0, 0, 
7.8, 7.6, 1.2, 10.2), y1 = c(0, 0, 3.4, 21.4, 1.8, 1.4), y2 = c(7.8, 
7.6, 1.2, 10.2, 7, 0), z1 = c(0, 1.6, 7.6, 23.6, 3.2, 0), z2 = c(8.6, 
1.4, 0, 0, 0, 0)), .Names = c("x1", "x2", "y1", "y2", "z1", "z2"
), class = "data.frame", row.names = c(NA, -6L))


    x1   x2   y1   y2   z1  z2
1  0.0  0.0  0.0  7.8  0.0 8.6
2  8.6  0.0  0.0  7.6  1.6 1.4
3 11.2  7.8  3.4  1.2  7.6 0.0
4  8.4  7.6 21.4 10.2 23.6 0.0
5  0.0  1.2  1.8  7.0  3.2 0.0
6  0.0 10.2  1.4  0.0  0.0 0.0
但当我像那样重命名列时

myd<-structure(list(X2005 = c(0, 8.6, 11.2, 8.4, 0, 0), X2005.1 = c(0, 
0, 7.8, 7.6, 1.2, 10.2), X2006 = c(0, 0, 3.4, 21.4, 1.8, 1.4), 
    X2006.1 = c(7.8, 7.6, 1.2, 10.2, 7, 0), X2007 = c(0, 1.6, 
    7.6, 23.6, 3.2, 0), X2007.1 = c(8.6, 1.4, 0, 0, 0, 0)), .Names = c("X2005", 
"X2005.1", "X2006", "X2006.1", "X2007", "X2007.1"), row.names = c(NA, 
6L), class = "data.frame")


  X2005 X2005.1 X2006 X2006.1 X2007 X2007.1
1   0.0     0.0   0.0     7.8   0.0     8.6
2   8.6     0.0   0.0     7.6   1.6     1.4
3  11.2     7.8   3.4     1.2   7.6     0.0
4   8.4     7.6  21.4    10.2  23.6     0.0
5   0.0     1.2   1.8     7.0   3.2     0.0
6   0.0    10.2   1.4     0.0   0.0     0.0

一种选择是使用
sub
,并根据需要将名称转换为
因子
,使用
标签

names(mydata) <- factor(sub("[0-9]", "", names(mydata)), labels = 2005:2007)

我们可以使用
gsub
匹配字符串开头(
^
)的字母“X”,或者(
|
字符串末尾(
$
)的数字(
$
),并替换为空白(


如果输出超过一个数字,则不清楚预期的输出,然后使用
[0-9]+
我的意思是,我可以按x、y、z字母对列进行分组。但是如何使用数字作为列名而不是字母(x、y、z)对列进行分组?如果您可以显示预期的输出,我不清楚您期望的是什么。该组的用途是什么?是否将其拆分为不同的数据集?这是否用于不同的包?如果您希望使用一个列名称,它是一个数字,那么
group_by(`2005`、`2006`、`2007`)
应该仍然可以工作。可以像我的问题中那样添加扩展名x1、x2、y1、y2等吗?例如:
2005.1
2006.1
2007.1
。因为我的脚本中的函数正在查找扩展名的数量。例如有
平均值(mydata[,paste0(x,1)]
平均值(mydata[,paste0>)(x,2)]
。使用第一个代码;我获取2005年第一列的平均值,使用第二个代码,查找2005年第二列的平均值2005@H是的,你可以做
make.unique(names(myd))
或者另一个选项是
paste(names(myd),ave(seq_-along(names(myd)),names(myd),FUN=seq_-along,sep=“.”)
很抱歉问得太多。第二个代码对我很有用。但是在您的评论中应用第二个代码后,我如何才能获得
[1]“2005”“2006”“2007”
。@HüsamettinTayş我只需删除带有
唯一性(sub(\.\\d+$,“”,names(myd))
# [1] "2005" "2006" "2007"
names(mydata) <- factor(sub("[0-9]", "", names(mydata)), labels = 2005:2007)
names(mydata)
#[1] "2005" "2005" "2006" "2006" "2007" "2007"
names(myd) <- gsub("^X|\\.\\d+$", "", names(myd))
names(myd)
#[1] "2005" "2005" "2006" "2006" "2007" "2007"

unique(names(myd))
#[1] "2005" "2006" "2007"
substr(names(myd), 2, 5)