假设我有宽格式的数据(行中的样本和列中的种类)。
char
我想基于对所有物种具有的功能组的引用来自动更改物种名称(因此即使我在数据集中的参考物种比实际物种更多,它也可以使用),例如:< / p>
wchar_t
编辑
由于@Dan Y的建议,我现在可以将种类名称更改为其功能组名称:
species <- data.frame(
Sample = 1:10,
Lobvar = c(21, 15, 12, 11, 32, 42, 54, 10, 1, 2),
Limtru = c(2, 5, 1, 0, 2, 22, 3, 0, 1, 2),
Pocele = c(3, 52, 11, 30, 22, 22, 23, 10, 21, 32),
Genmes = c(1, 0, 22, 1, 2,32, 2, 0, 1, 2)
)
但是,在我的实际data.frame中,我有更多种类,这会在不同的列中创建许多具有相同名称的功能组。现在,我想对具有相同名称的列求和。我更新了示例,以得到一个结果,其中有多个具有相同名称的功能组。
所以我明白了:
reference <- data.frame(
Species_name = c("Lobvar", "Ampmis", "Pocele", "Genmes", "Limtru", "Secgio", "Nasval", "Letgos", "Salnes", "Verbes"),
Functional_group = c("Crustose", "Geniculate", "Erect", "CCA", "CCA", "CCA", "Geniculate", "Turf","Turf", "Crustose"),
stringsAsFactors = FALSE
)
我想要的最终结果是:
names(species)[2:ncol(species)] <- reference$Functional_group[match(names(species), reference$Species_name)][-1]
您如何建议您这样做?感谢您的帮助和我已经收到的惊人建议。
答案 0 :(得分:0)
问题1)我们可以使用match
进行名称查找:
names(species)[2:ncol(species)] <- reference$Functional_group[match(names(species), reference$Species_name)][-1]
问题2)然后,我们可以在mapply
函数上使用rowSums
函数来对名称进行一些正则表达式:
namevec <- gsub("\\.[[:digit:]]", "", names(df))
mapply(function(x) rowSums(df[which(namevec == x)]), unique(namevec))