r - 有条件地将字符串转换为特定数值

标签 r dataframe if-statement sapply

我确信对此有一个简单的答案,但我已经扫描了堆栈溢出,但无法找到解决方案。似乎 sapply 和 ifelse 函数的组合可能可以完成这项工作(但我不确定)。

所以我有一个包含字符的数据框,除了一列是数值。

####Create dataframe which needs converting
df <- data.frame(Sample_1 = rep(letters[1:3], each = 3),
             Sample_2 = rep("a", times = 9))
df$Number <- rep(seq(from=1,to=3,by=1))

我想将此数据框中的字符转换为特定数字。字符需要转换成什么取决于最后一列中的数字。所以标准是:

  • 如果 Number = 1,则 a 应更改为 30,b 应更改为 20,c 应更改为 10
  • 如果 Number = 2,则 a 应更改为 35,b 应更改为 25,c 应更改为 15
  • 如果 Number = 3,则 a 应更改为 40,b 应更改为 30,c 应更改为 20

这是一个突出显示此转换的数据框

A <- c(30,20,10)
B <- c(35,25,15)
C <- c(40,30,20)
Conversion_df <- data.frame(A, B,C)

这是所需的输出。

Final <- data.frame(Sample_1 = c(30,20,10,35,25,15,40,30,20),
                Sample_2 = c(30,20,10,30,20,10,30,20,10))

预先感谢您的帮助。

最佳答案

首先,我们可以创建一个函数来使用 if 语句评估样本:

valuate_sample <- function(x,y) {
    ifelse(y==1, ifelse(x=='a',30, ifelse(x=='b',20, 10)),
           ifelse(y==2, ifelse(x=='a',35, ifelse(x=='b',25, 15)),
                  ifelse(y==3, ifelse(x=='a',40, ifelse(x=='b',30, 20)),0)))
}

之后我们只需要使用数据框中的函数:

df <- df %>% 
    mutate(
        Sample_1 = valuate_sample(Sample_1, Number),
        Sample_2 = valuate_sample(Sample_2, Number)
        )

结果:

enter image description here

关于r - 有条件地将字符串转换为特定数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690043/

相关文章:

r - 用于 summary.glm 函数的 MagrittR T 型管道。简单问题

python - 将 if 条件放在列表理解中的哪里?

C++ 条件运算符与 if-else

用于检查文件名以预期字符串开头的 bash 脚本

r - 如何合并具有重复测量的数据集

c - 剖析 C 代码 R

r - ggplot : adding color aesthetic changes stack order

python-3.x - 属性错误: 'DataFrame' object has no attribute 'name' when using SMOTE

python - 从 Pandas 数据帧生成相似度矩阵

python - 按单列分位数对 Pandas 数据框进行分组