【问题标题】:R: Create a column with values based on grouping specific rowsR:根据对特定行进行分组创建具有值的列
【发布时间】:2015-08-24 19:31:11
【问题描述】:

这是一个示例数据框,

ID <- c(101,102,103,201,202,203,301,302,303,401,402,403) 
Point_A <- c(10,20,30,40,50,60,70,80,90,100,110,120) 
df <- data.frame(ID,Point_A)

     ID  Point_A
1    101   10 
2    102   20 
3    103   30 
4    201   40 
5    202   50 
6    203   60 
7    301   70 
8    302   80  
9    303   90  
10   401   100 
11   402   110 
12   403   120 

我想创建一个名为 Type in df 的列,其中包含 2 个值 A 和 B。 A 型组 (101,102,103,401,402,403) 和 B 型组 (201,202,203,301,302,303) 一起。

我想要的输出是

     ID  Point_A Type 
1    101   10     A
2    102   20     A 
3    103   30     A 
4    401   100    A 
5    402   110    A 
6    403   120    A 
7    201   40     B 
8    202   50     B  
9    203   60     B  
10   301   70     B 
11   302   80     B 
12   303   90     B   

请注意,顺序也发生了变化。我只是知道如何做到这一点。请提出一些解决此问题的方法。

【问题讨论】:

    标签: r group-by dataframe


    【解决方案1】:

    试试

     df$Type <- c('B', 'A')[(df$ID %in% c(101:103, 401:403))+1L]
    

    或者

     df$Type <-  c('A', 'B')[(df$ID>103 & df$ID<401)+1L]
    
     df <- df[order(df$Type),]
     row.names(df) <- NULL
     df
        ID Point_A Type
    1  101      10    A
    2  102      20    A
    3  103      30    A
    4  401     100    A
    5  402     110    A
    6  403     120    A
    7  201      40    B
    8  202      50    B
    9  203      60    B
    10 301      70    B
    11 302      80    B
    12 303      90    B
    

    更新

    对于 3 个组,创建一个示例向量

     v1 <- c(df$ID, c(501, 502, 503, 601, 602, 603))
     c('A', 'B', 'C')[(v1 >103 & v1 <401)+ 2*(v1>=501)+1L]
     #[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"
    

    或者

     library(car)
     recode(v1, '101:103="A";401:403="A";201:303="B";else="C"')
     #[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"
    

    【讨论】:

    • 太棒了。谢谢@akrun,我怎样才能扩展它以拥有像 Type C 这样的分组(501,502,503,601,602,603)?
    • @Sharath 如果您有很多组,请尝试cut 与所需的休息时间
    • 我还在学习 R。我只是查了一下。这是我能做的。 df$Type
    • @Sharath 您想为任何其他组(即 D 型左右)编码吗?
    • 非常感谢。这太棒了。快速说明一下,501 被分配了 A。我现在将进行编辑。
    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    相关资源
    最近更新 更多