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)