简体   繁体   English

如何根据 R 中的某些条件创建两列

[英]How to create two columns based on some criteria in R

The data I have is almost similar to the data below.我的数据和下面的数据几乎相似。


A=01-03
B=04-06
C=07-09
D=10-11

      data<-read.table (text=" ID   Class   Time1   Time2   Time3
        1   1   1   3   3
        2   1   4   3   2
        3   1   2   2   2
        1   2   1   4   1
        2   3   2   1   1
        3   2   3   2   3
        1   3   1   1   2
        2   2   4   3   1
        3   3   3   2   1
        1   1   4   3   2
        2   1   2   2   2
        3   2   1   4   1
    
        ", header=TRUE)

I want to create 2 columns right after the Class column, ie the Bin and Zero columns based on A, B, C and D and IDs.我想在 Class 列之后创建 2 列,即基于 A、B、C 和 D 和 ID 的 Bin 和 Zero 列。 Therefore A goes to IDs 1,2, and 3. B goes to the next IDs, ie, 1,2 and 3, and C goes to the next IDs, ie, 1,2,3 and so on.因此,A 转到 ID 1,2 和 3。B 转到下一个 ID,即 1,2 和 3,而 C 转到下一个 ID,即 1,2,3 等等。 Column Zero gets only numbers zeros.零列仅获得数字零。 So the outcome would be:所以结果将是:


     ID Class   Bin Zero    Time1   Time2   Time3
        1   1   01-03   0   1   3   3
        2   1   01-03   0   4   3   2
        3   1   01-03   0   2   2   2
        1   2   04-06   0   1   4   1
        2   3   04-06   0   2   1   1
        3   2   04-06   0   3   2   3
        1   3   07-09   0   1   1   2
        2   2   07-09   0   4   3   1
        3   3   07-09   0   3   2   1
        1   1   10-11   0   4   3   2
        2   1   10-11   0   2   2   2
        3   2   10-11   0   1   4   1

Please try the below code请尝试以下代码

library(tidyverse)

#use character vector with quotes
A='01-03'
B='04-06'
C='07-09'
D='10-11'

data<-read.table (text=" ID   Class   Time1   Time2   Time3
    1   1   1   3   3
    2   1   4   3   2
    3   1   2   2   2
    1   2   1   4   1
    2   3   2   1   1
    3   2   3   2   3
    1   3   1   1   2
    2   2   4   3   1
    3   3   3   2   1
    1   1   4   3   2
    2   1   2   2   2
    3   2   1   4   1

    ", header=TRUE)

#create a separate dataframe with bin column
data2 <- data.frame(bin=c(rep(A,3),rep(B,3),rep(C,3),rep(D,3))) 

data3 <- bind_cols(data, data2) %>% mutate(zero=0)

If you are open to a dplyr based solution, you could use如果您对基于dplyr的解决方案持开放态度,则可以使用

library(dplyr)

data %>% 
  group_by(ID) %>% 
  mutate(Bin = c(A, B, C, D),
         Zero = 0,
         .after = 2) %>% 
  ungroup()

This returns这返回

# A tibble: 12 × 7
      ID Class Bin    Zero Time1 Time2 Time3
   <int> <int> <chr> <dbl> <int> <int> <int>
 1     1     1 01-03     0     1     3     3
 2     2     1 01-03     0     4     3     2
 3     3     1 01-03     0     2     2     2
 4     1     2 04-06     0     1     4     1
 5     2     3 04-06     0     2     1     1
 6     3     2 04-06     0     3     2     3
 7     1     3 07-09     0     1     1     2
 8     2     2 07-09     0     4     3     1
 9     3     3 07-09     0     3     2     1
10     1     1 10-11     0     4     3     2
11     2     1 10-11     0     2     2     2
12     3     2 10-11     0     1     4     1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM