【问题标题】:How to combine two or more variables into one in R?如何在R中将两个或多个变量组合成一个?
【发布时间】:2021-05-10 00:14:34
【问题描述】:

我目前正在尝试对我的数据进行 t 检验。我有三个变量(或者说组)。有猫或狗或没有宠物的人。现在我想组成小组,把猫和狗的人放在一个叫做“宠物”的小组中。然后我将此组与“无宠物”组进行比较。我该怎么做?

> mytable <- read.csv2("versuch.csv")
> mytable
  cats dogs none
1    3    1    3
2    5    2    2
3    3    6    5
4    8    8    9
5    5    5    8
6    6    9    2

我希望它看起来像这样:

> mytable <- read.csv2("versuch.csv")
> mytable
  cats dogs none  pets
1    3    1    3  3
2    5    2    2  5
3    3    6    5  3
4    8    8    9  8
5    5    5    8  5
6    6    9    2  6
7                 1
8                 2
9                 6
10                8
...               ....
 

所以基本上我想要一个额外的变量,它包含 cat 和 dog 变量的值。有没有可能做到这一点?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用来自tibble 包的add_row

    library(tidyverse)
    
    df %>% 
      mutate(pets = cats) %>% 
      add_row(pets = df$dogs)
    

    输出:

        cats  dogs  none  pets
       <dbl> <dbl> <dbl> <dbl>
     1     3     1     3     3
     2     5     2     2     5
     3     3     6     5     3
     4     8     8     9     8
     5     5     5     8     5
     6     6     9     2     6
     7    NA    NA    NA     1
     8    NA    NA    NA     2
     9    NA    NA    NA     6
    10    NA    NA    NA     8
    11    NA    NA    NA     5
    12    NA    NA    NA     9
    

    数据:

    df <- tibble::tribble(
    ~cats, ~dogs, ~none,
    3, 1, 3, 
    5, 2, 2, 
    3, 6, 5, 
    8, 8, 9,
    5, 5, 8,
    6, 9, 2)
    

    【讨论】:

      【解决方案2】:

      数据框中的不同列的行数不能不相等。您可以将NA 附加到其他列。

      vec <- unlist(mytable[c('cats', 'dogs')], use.names = FALSE)
      mytable <- cbind(mytable[1:length(vec), ], pets = vec)
      rownames(mytable) <- NULL
      mytable
      
      #   cats dogs none pets
      #1     3    1    3    3
      #2     5    2    2    5
      #3     3    6    5    3
      #4     8    8    9    8
      #5     5    5    8    5
      #6     6    9    2    6
      #7    NA   NA   NA    1
      #8    NA   NA   NA    2
      #9    NA   NA   NA    6
      #10   NA   NA   NA    8
      #11   NA   NA   NA    5
      #12   NA   NA   NA    9
      

      数据

      mytable <- structure(list(cats = c(3L, 5L, 3L, 8L, 5L, 6L), dogs = c(1L, 
      2L, 6L, 8L, 5L, 9L), none = c(3L, 2L, 5L, 9L, 8L, 2L)), 
      class = "data.frame", row.names = c(NA, -6L))
      

      【讨论】:

      • 这太有帮助了!谢谢!据我所知,拥有 NA 是可以的。再问一个问题,以便我可以理解代码:我可以在unlist(mytable[1:2], use.names = FALSE) 中使用变量的名称而不是 [1:2] 我的表很大并且有很多不同的变量。使用变量的编号而不是名称会非常困难。
      • 是的,你可以做vec &lt;- unlist(mytable[c('cats', 'dogs')], use.names = FALSE)
      • 刚刚发现另一个问题。新变量“pets”没有出现在我的 data.frame mytable 中。如何将创建的变量 pets 放入我的初始 data.frame?
      • 我创建了一个新对象result,你也可以更新同一个对象。查看更新的答案。
      猜你喜欢
      • 1970-01-01
      • 2018-03-03
      • 2021-02-03
      • 2021-11-08
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      相关资源
      最近更新 更多