我正在尝试使用tidyverse找到一种方便的方法来重命名多个列。假设我有一个tibble:
df <- tibble(a = 1, b = 2, tmp_2000 = 23, tmp_2001 = 22.1, tmp_2002 = 25, pre_2000, pre_2001, pre_2002)
# A tibble: 1 x 8
a b tmp_2000 tmp_2001 tmp_2002 pre_2000 pre_2001 pre_2002
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 23 22.1 25 100 103 189
temp
和pre
代表温度和降水量。我想以整洁的形式重新组织这个表格,即有一个列是温度
,一个列是降水量
,每一行是对应年份的值。
目前我找到的唯一选项是做类似于这样的事情
df <- df %>%
select(-starts_with("pre"))
names(df)[3:5] <- substr(names(df)[3:5],5,8)
df<-df %>%
gather(`2000`:`2002`,key = "year",value="temp") %>%
mutate("year" = as.integer(year))
# A tibble: 3 x 4
a b year temp
<dbl> <dbl> <int> <dbl>
1 2 2000 23
1 2 2001 22.1
1 2 2002 25
我需要做相同的事情来处理降水数据,然后将两个表连接起来。未来我将获得更多的天气变量,这个过程会很快变得繁琐。
有没有人知道如何使用tidyverse更有效地完成这项工作?
谢谢,
Jo
PS:我看到的唯一类似的帖子是关于重新编码变量(使用mutate_at)或使用上面提到的names
重命名列。
reshape(df,3:ncol(df),sep="_",dir="long")
- Onyambutibble
,没有别的。也就是说,你可以执行reshape(data.frame(df),3:ncol(df),idvar = 1:2,sep="_",dir="long")
,然后将rownames
设置为NULL。 - Onyambureshape
函数对你来说很新?我不能确定。也许你可以尝试使用data.table::melt
函数。 - Onyambudplyr::
进行所有的重塑操作,所以reshape
看起来有些陌生。但我相信随着练习,它会变得很明显。谢谢! - Jo_