Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r-通过提取部分名称重命名多个列_R_Gsub_Strsplit - Fatal编程技术网

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

r-通过提取部分名称重命名多个列,r,gsub,strsplit,R,Gsub,Strsplit,我是一个初学者,也许有人已经问过这个问题了,但我找不到答案 我的数据是这样的 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"

我是一个初学者,也许有人已经问过这个问题了,但我找不到答案

我的数据是这样的

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))

有人能帮我吗?。谢谢。

有使用
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
也许是这样

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

我知道使用数字作为列名的危险,但我需要这样做只是为了检查我的数据。稍后我将删除名称以进行聚类分析。在
sapply(名称(matriz),“”),“[”,1)
中,
“[”,1
是什么意思?我正试图将此片段改编为我自己的使用,但很难弄清楚。@CelineDion检查
字母[1]
如何给出
“a”
作为答案。然后尝试
“[”(字母,1)
括号“[”是一个特殊函数,不需要像大多数函数那样使用典型的括号。但是R中的每个函数都可以用
函数(arg1,…)
格式编写。请尝试
'+'(5,4)
#with sub()
names(matriz) <- sub("_.*", "", names(matriz))

#with strsplit()
names(matriz) <- sapply(strsplit(names(matriz), "_"), '[', 1)
library(stringr)
names(matriz) = str_sub(names(matriz),0,3)