Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据以前的值命名列中的值,无系统顺序_R - Fatal编程技术网

R 根据以前的值命名列中的值,无系统顺序

R 根据以前的值命名列中的值,无系统顺序,r,R,我有个问题不知道怎么解决。我知道当数据集中有一个系统时如何编码,例如每隔一行,但在这个数据集中没有顺序。这是一个来自更大数据集的示例,因此不可能从中生成任何系统。谢谢你的帮助 id <- rep(c(300, 450),times=c(20,17)) visit <- c(1,1,2,2,2,2,2,2,3,3,4,5,5,5,5,5,6,6,6,1,2,2,2,2,3,3,4,4,4,5,5,5,5,5,5,5,6) trt <- c(0,0,"A",

我有个问题不知道怎么解决。我知道当数据集中有一个系统时如何编码,例如每隔一行,但在这个数据集中没有顺序。这是一个来自更大数据集的示例,因此不可能从中生成任何系统。谢谢你的帮助

    id <- rep(c(300, 450),times=c(20,17))
    visit <- c(1,1,2,2,2,2,2,2,3,3,4,5,5,5,5,5,6,6,6,1,2,2,2,2,3,3,4,4,4,5,5,5,5,5,5,5,6)
    trt <- c(0,0,"A","A","A","A","A","A", 0,0, "B", 0, 0,0,0,0,"C", "C","C", 0, "B", "B","B","B", 0,0,"C", "C","C",0,0,0,0, 0, 0,0,"A")
    q1 <- c(4,6,10,11,14,11,15,19,3,2,7,4,5,3,4,1,4,5,4,3,6,7,3,4,5,4,5,4,3,3,4,2,6,5,4,3,18)
    df <- data.frame(id,visit, trt, q1)
    df
       id   visit trt q1
    1  300     1   0  4
    2  300     1   0  6
    3  300     2   A 10
    4  300     2   A 11
    5  300     2   A 14
    6  300     2   A 11
    7  300     2   A 15
    8  300     2   A 19
    9  300     3   0  3
    10 300     3   0  2
    11 300     4   B  7
    12 300     5   0  4
    13 300     5   0  5
    14 300     5   0  3
    15 300     5   0  4
    16 300     5   0  1
    17 300     6   C  4
    18 300     6   C  5
    19 300     6   C  4
    20 300     1   0  3
    21 450     2   B  6
    22 450     2   B  7
    23 450     2   B  3
    24 450     2   B  4
    25 450     3   0  5
    26 450     3   0  4
    27 450     4   C  5
    28 450     4   C  4
    29 450     4   C  3
    30 450     5   0  3
    31 450     5   0  4
    32 450     5   0  2
    33 450     5   0  6
    34 450     5   0  5
    35 450     5   0  4
    36 450     5   0  3
    37 450     6   A 18

我想这就是你想要的,用下一个可用的字母替换所有的“0”,并在末尾粘贴“0”

    df$tmp=as.character(df$trt)

    for (i in 1:(nrow(df)-1)) {
      if (df$trt[i]=="0") {
        j=i+1
        while (df$trt[j]=="0" & j<=nrow(df)) {
          j=j+1
        }
        df$tmp[i]=paste0(df$trt[j],df$trt[i])
      }
    }

我们可以使用
dplyr
tidyr::fill
。将
trt
中的0值替换为
NA
,在
的“向上”
方向使用
填充
,并用填充值粘贴
0

library(dplyr)

df %>%
  mutate(trt1 = replace(trt, trt == 0, NA)) %>%
  tidyr::fill(trt1, .direction = "up") %>%
  mutate(trt1 = ifelse(trt == 0, paste0(trt1, trt), trt))

#    id visit trt q1 trt1
#1  300     1   0  4   A0
#2  300     1   0  6   A0
#3  300     2   A 10    A
#4  300     2   A 11    A
#5  300     2   A 14    A
#6  300     2   A 11    A
#7  300     2   A 15    A
#8  300     2   A 19    A
#9  300     3   0  3   B0
#10 300     3   0  2   B0
#....
数据

使用
stringsAsFactors=FALSE
将数据读取为字符而非因子

df <- data.frame(id,visit, trt, q1, stringsAsFactors = FALSE)
df
library(dplyr)

df %>%
  mutate(trt1 = replace(trt, trt == 0, NA)) %>%
  tidyr::fill(trt1, .direction = "up") %>%
  mutate(trt1 = ifelse(trt == 0, paste0(trt1, trt), trt))

#    id visit trt q1 trt1
#1  300     1   0  4   A0
#2  300     1   0  6   A0
#3  300     2   A 10    A
#4  300     2   A 11    A
#5  300     2   A 14    A
#6  300     2   A 11    A
#7  300     2   A 15    A
#8  300     2   A 19    A
#9  300     3   0  3   B0
#10 300     3   0  2   B0
#....
df <- data.frame(id,visit, trt, q1, stringsAsFactors = FALSE)