r-通过提取部分名称重命名多个列

时间:2016-02-16 22:31:20

标签: r gsub strsplit

我是R初学者,也许有人应该已经问过这个,但我找不到答案。

我的数据看起来像这样。

"If-None-Match":"ETag"

我想通过提取前3个数字来重命名列名,即“300_09_11”到“300”等等。

我一直在尝试id_lance <-c("300_09_11", "400_09_11", "400_09_11", "400_09_11", "500_06_08", "500_06_08", "500_09_11", "600_06_08" , "700_09_11", "700_09_11") especie <-c("esp1", "esp1", "esp1", "esp2", "esp2", "esp3", "esp2", "esp3", "esp3", "esp4") abundancia <-as.numeric (c("190", "267","76", "111", "34", "334", "777", "1067", "19", "255")) df = data.frame(id_lance, especie, abundancia) matriz <-as.data.frame(tapply(df$abundancia,list(df$especie, df$id_lance),sum)) matriz[] <- lapply(matriz,function(x) replace(x, is.na(x), 0)) strsplit,然后一起没有成功。我不知道是否可以通过循环或类似失败的尝试来完成。

gsub

任何人都可以帮帮我吗?感谢。

2 个答案:

答案 0 :(得分:1)

dict(zip(d, itertools.repeat(0))) # create a dict using the zip of the keys and some zeros sub有多种方式,但在此处使用strsplit非常简单明了。我还要警告用数字命名列会在以后遇到麻烦:

substr

还有一些names(matriz) <- substr(names(matriz), 1, 3) matriz # 300 400 500 500 600 700 # esp1 190 343 0 0 0 0 # esp2 0 111 34 777 0 0 # esp3 0 0 334 0 1067 19 # esp4 0 0 0 0 0 255 学习选项:

base R

答案 1 :(得分:0)

也许是这样的?

library(stringr)
names(matriz) = str_sub(names(matriz),0,3)