代码之家  ›  专栏  ›  技术社区  ›  remo

R: 从两个单独的列中创建一列

  •  1
  • remo  · 技术社区  · 3 年前

    我想在“分数1”和“分数2”列中创建一个新列(见下面的数据)。新列应该命名为“Score”,有14行,因为我希望在第8到14列中“Score 1”列的值之后添加“Score 2”列的数值。

    我的数据如下所示:

    structure(list(`Score 1` = c(1L, 2L, 2L, 3L, 4L, 4L, 2L), `Score 2` = c(3L, 
    4L, 4L, 3L, 3L, 2L, NA)), class = "data.frame", row.names = c(NA, 
    -7L))
    

    我试着做了以下事情: Data_new <- data.frame(Score=unlist(Data)) 这不起作用,因为这两列的行数不相同。

    最后,我的数据应该是这样的:

    structure(list(Score = c(1L, 2L, 2L, 3L, 4L, 4L, 2L, 3L, 4L, 
    4L, 3L, 3L, 2L)), class = "data.frame", row.names = c(NA, -13L
    ))
    

    有人能帮我查一下密码吗?

    4 回复  |  直到 3 年前
        1
  •  3
  •   jay.sf    3 年前

    你很接近,只是省略了 NA s正在使用 na.omit 和使用 unname 以获得干净的行名。

    new_dat <- na.omit(data.frame(Score = unname(unlist(dat))))
    new_dat
    #    Score
    # 1      1
    # 2      2
    # 3      2
    # 4      3
    # 5      4
    # 6      4
    # 7      2
    # 8      3
    # 9      4
    # 10     4
    # 11     3
    # 12     3
    # 13     2
    

    数据

    dat <- structure(list(`Score 1` = c(1L, 2L, 2L, 3L, 4L, 4L, 2L), `Score 2` = c(3L, 
    4L, 4L, 3L, 3L, 2L, NA)), class = "data.frame", row.names = c(NA, 
    -7L))
    
        2
  •  1
  •   Chris Ruehlemann    3 年前
    library(tidyverse)
    df %>%
      # cast the two `Score` columns longer:
      pivot_longer(starts_with("Score")) %>%
      # change the column name:
      rename(Score = value) %>%
      # select the new column:
      select(Score) %>%
      # remove `NA`:
      na.omit()
    
        3
  •  1
  •   Andrew Chisholm    3 年前

    下面是一个使用 pivot_longer .

    编辑:删除NA

    library(tidyr)
    df <-
        structure(list(
            `Score 1` = c(1L, 2L, 2L, 3L, 4L, 4L, 2L),
            `Score 2` = c(3L,
                                        4L, 4L, 3L, 3L, 2L, NA)
        ),
        class = "data.frame",
        row.names = c(NA,-7L))
        
    new <- 
        df %>% 
        pivot_longer(names_to = 'Delete', cols=c('Score 1', 'Score 2')) %>%
        select(Score=value) %>% na.omit()
        
    new
    # A tibble: 14 × 1
    # Score
    #<int>
    # 1     1
    # 2     3
    # 3     2
    # 4     4
    # 5     2
    # 6     4
    # 7     3
    # 8     3
    # 9     4
    # 10     3
    # 11     4
    # 12     2
    # 13     2
    
        4
  •  1
  •   Maurits Evers    3 年前

    另一个短基数R选项是使用 stack

    na.omit(stack(Data))
    #   values     ind
    #1       1 Score 1
    #2       2 Score 1
    #3       2 Score 1
    #4       3 Score 1
    #5       4 Score 1
    #6       4 Score 1
    #7       2 Score 1
    #8       3 Score 2
    #9       4 Score 2
    #10      4 Score 2
    #11      3 Score 2
    #12      3 Score 2
    #13      2 Score 2
    

    这还具有自动添加具有表示源列的条目的列的优点。

    推荐文章