如何在R中为重复项创建单个列

时间:2017-11-22 13:29:14

标签: r

我有一个看起来像这样的表(> 200读数,重复样本):

          **A    B   C**
 Site1      1    2   3
 Site1      4    5   6
 Site2      7    8   9
 Site2      10   11  12

可以使用哪些代码来输出:

    **X**
    1
    4
    2
    5
    3
    6
    7
    10
    8
    11
    9
    12

3 个答案:

答案 0 :(得分:2)

假设您的数据集是数据框,您可以考虑使用dplyrtidyr。请注意,数据框不能有重复的行名,因此我假设如果记录为SiteSite1,则会记录一个名为Site2的列。

library(dplyr)
library(tidyr)

# Create example data frame
dt <- read.table(text = "Site    A    B   C
 Site1      1    2   3
 Site1      4    5   6
 Site2      7    8   9
 Site2      10   11  12",
                 header = TRUE, stringsAsFactors = FALSE)
dt
#    Site  A  B  C
# 1 Site1  1  2  3
# 2 Site1  4  5  6
# 3 Site2  7  8  9
# 4 Site2 10 11 12

dt2 <- dt %>%
  gather(Col, X, -Site) %>%
  arrange(Site) %>%
  select(X)
dt2
#     X
# 1   1
# 2   4
# 3   2
# 4   5
# 5   3
# 6   6
# 7   7
# 8  10
# 9   8
# 10 11
# 11  9
# 12 12

答案 1 :(得分:1)

假设数据集是matrix(因为data.frame不能有重复的行名称),rownames为splitunlistlist

data.frame(X=unlist(split(m1, row.names(m1)), use.names = FALSE))
#    X
#1   1
#2   4
#3   2
#4   5
#5   3
#6   6
#7   7
#8  10
#9   8
#10 11
#11  9
#12 12

数据

m1 <- structure(c(1L, 4L, 7L, 10L, 2L, 5L, 8L, 11L, 3L, 6L, 9L, 12L
), .Dim = c(4L, 3L), .Dimnames = list(c("Site1", "Site1", "Site2", 
 "Site2"), c("A", "B", "C")))

答案 2 :(得分:0)

如果您拥有的内容(我们称之为data)属于matrix类,那么您可以使用以下函数:

X <- as.vector(t(data))

如果是data.frame将其转换为矩阵,因为我看到所有条目都是数字。