在列中标识唯一值,然后在新列中重命名它们

时间:2018-09-17 11:45:36

标签: r dataframe

我需要有关R中数据帧操作的一些建议。我正在进行细胞克隆性分析,并且试图将细胞分为扩展或未扩展的克隆。

我的数据框如下:

2

对于克隆性列,我做了一个循环,将计数> = 3的行标识为扩展,而计数<3的行标识为未扩展。

但是,我想做的是将计数<3的行标识为未扩展,但是对于计数> = 3的行,请根据其标识将其标识为Expanded#。

我希望我的最终数据框架如下所示:

10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0
0 10 1 9 2 8 3 7 4 6 5 5 6 4 7 3 8 2 9 1 10 0

我认为我需要运行一个循环,但是我不确定如何修改循环以执行此操作。我当前使用的循环如下:

Cell    Ident   Count   Clonality
C1      A       5       Expanded
C2      B       3       Expanded
C3      A       5       Expanded
C4      C       2       Unexpanded
C5      A       5       Expanded
C6      B       3       Expanded
C7      C       2       Unexpanded
C8      A       5       Expanded
C9      A       5       Expanded
C10     B       3       Expanded

希望有人可以在这里引导我。

1 个答案:

答案 0 :(得分:4)

您可以这样做:

library(tidyverse)
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(Clonality = if_else(
        Clonality == "Expanded",
        sprintf("%s %i", Clonality, as.factor(Ident)),
        Clonality))
#   Cell Ident Count  Clonality
#1    C1     A     5 Expanded 1
#2    C2     B     3 Expanded 2
#3    C3     A     5 Expanded 1
#4    C4     C     2 Unexpanded
#5    C5     A     5 Expanded 1
#6    C6     B     3 Expanded 2
#7    C7     C     2 Unexpanded
#8    C8     A     5 Expanded 1
#9    C9     A     5 Expanded 1
#10  C10     B     3 Expanded 2

说明:我们通过添加Clonality的{​​{1}}级(这意味着factor => 1,Ident => 2,来转换A中的条目等等),并且仅当B


或者在基数R中使用Clonality == Expanded

transform

样本数据

df <- transform(df, Clonality = ifelse(
    Clonality == "Expanded",
    sprintf("%s %i", Clonality, as.factor(Ident)),
    as.character(Clonality)))
df
#   Cell Ident Count  Clonality
#1    C1     A     5 Expanded 1
#2    C2     B     3 Expanded 2
#3    C3     A     5 Expanded 1
#4    C4     C     2 Unexpanded
#5    C5     A     5 Expanded 1
#6    C6     B     3 Expanded 2
#7    C7     C     2 Unexpanded
#8    C8     A     5 Expanded 1
#9    C9     A     5 Expanded 1
#10  C10     B     3 Expanded 2