i有一个dataframe(d3),其中有一些列名称为" date_month.year",我想用" sover"使用相同的"月",他们将只是一个总结专栏。
以下是我尝试过的代码和输出
library(stringr)
print(colnames(d3))
#below is output of the print statement
#[1] "ProductCategoryDesc" "RegionDesc" "SourceDesc" "variable"
#[5] "2019-02-28_Feb.2019" "2019-03-01_Mar.2019" "2019-03-04_Mar.2019" "2019-03-05_Mar.2019"
#[9] "2019-03-06_Mar.2019" "2019-03-07_Mar.2019" "2019-03-08_Mar.2019"
d3 <- d3 %>% mutate(col = str_remove(col, '*._'))
这是我遇到的错误: 评估错误:参数 str
应该是字符向量(或可重复的对象)。
所以我得到了我的问题的第一部分,回答了我以前用一个月的格式获取所有列名称包含不同类别的数据框的相同名称r
colnames(d3) <- gsub('.*_', '', colnames(d3))
以下是我用来获取具有重复名称的列的代码,但是使用此代码,不一定将汇总值放在正确的列中。
indx <- sapply(d3, is.numeric)#check which columns are numeric
nm1 <- which(indx)#get the numeric index of the column
indx2 <- duplicated(names(nm1))|duplicated(names(nm1),fromLast=TRUE)
nm2 <- nm1[indx2]
indx3 <- duplicated(names(nm2))
d3[nm2[!indx3]] <- Map(function(x,y) rowSums(x[y],na.rm = FALSE),
list(d3),split(nm2, names(nm2)))
d3 <- d3[ -nm2[indx3]]
如果要更改列名,则应更改colnames
:
colnames(d3) <- gsub('.*_', '', colnames(d3))
请注意,在您的正则量词中,量词(即*
)跟随它们量化的内容。因此应该是.*_
而不是*._
一个示例,我们在iris
中的.
之前删除文本:
colnames(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
# In regex, . means any character, so to match an actual '.',
# we need to 'escape' it with \.
colnames(iris) <- gsub('.*\.', '', colnames(iris))
colnames(iris)
[1] "Length" "Width" "Length" "Width" "Species"
colnames(d3) <- sapply(colnames(d3), function(colname){
return( str_remove(colname, '.*_') )
})
正则应该是"。*_"要匹配您需要的情况