如何在R中基于某些条件创建两列

ercv8c1e  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(124)

我所掌握的数据与下面的数据几乎相似。

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)

我想在“类”列之后创建2列,即基于A、B、C、D和ID的Bin列和Zero列。因此,A将转到ID 1、2和3。B将转到下一个ID,即1、2和3,C将转到下一个ID,即1、2和3,依此类推。列Zero仅获得数字零。因此,结果将是:

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
bbuxkriu

bbuxkriu1#

请尝试以下代码

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)
qv7cva1a

qv7cva1a2#

如果您愿意使用基于dplyr的解决方案,则可以使用

library(dplyr)

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

这将返回

# 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

相关问题