用第二个数据框中定义的类别替换数据框列名称的公式

时间:2018-09-07 00:39:34

标签: r dataframe names

假设我有宽格式的数据(行中的样本和列中的种类)。

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]

您如何建议您这样做?感谢您的帮助和我已经收到的惊人建议。

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