R - 如何声明根据列名更改列值的 ifelse 条件?(剧透:我尝试的结果是NA)



我选择用数值表示的前三个特征来显示一个人的测试结果摘要。我们总共有6个特征,通过在先前的数据帧中按desc标准排序,从中选择3个最高值。因此,根据值的不同,我们可以使用不同的列名来识别数字所指的特征,总共6个特征中总是有3个主要特征。

对于数值表示,我已经有一些图表来显示数值。我想展示一张表格,里面有一些与这三大特征相关的文本。

我想做的是根据占据列名的特征名称来替换相关文本的数值,这样文本就可以与该列上的特征匹配。

我通过写一个if-else语句来实现这一点,但我不知道如何引用列名,所以到目前为止我所尝试的是这样的:

假设在这种情况下,前3个特征如下:

df <- data.frame (Adaptable = 8.1, Dinamic = 7.7, Practic= 4.7)

所以我需要我的代码来替换每个数字来描述每个特征。由于特征并不总是以相同的顺序呈现,因此有必要确定条件。因此,我现在正在尝试使用这段代码的第一个特性,这对我来说是有意义的,但最后,即使使用colname作为值,当我运行ifelse语句时,所需列中的值也会被NA替换。

if (colnames(df[1]) == "Adaptable") {
df[1,1] = "text for adaptable trait"
} else (df[1,1] = "some other text")

现在使用colname作为独立值:

df <- data.frame (V1 = c(Adaptable, 8.1), V2 = c(Dinamic, 7.7), V3 = c(Practic, 4.7))

if (df[1,1] == "Adaptable") {
df[2,1] = "some adaptable text"
} else (df[2,1] = "some other text")

使用此特定代码,数值将被NA 替代

提前感谢你们的任何评论和帮助,如果你们能提供一些答案或参考一些文档,我将不胜感激。

您可以在列名上尝试此解决方案:

#Data
df <- data.frame (Adaptable = 8.1, Dinamic = 7.7, Practic= 4.7)
#Check colnames
df[,which(colnames(df)=='Adaptable')] <- 'text for adaptable trait'

输出:

Adaptable Dinamic Practic
1 text for adaptable trait     7.7     4.7

如果要应用于所有列,则应使用带文本的向量,并尝试循环或lapply()。让我知道这是否适合你。

最新更新