按索引和其他列值划分的列值的堆积范围

时间:2018-07-16 00:35:01

标签: r

好的,这似乎有点简单,但是我是R菜鸟,似乎无法弄清楚。

我从带有两列的csv文件中读取了一个表,其中第一列是位置名称,后跟该位置的观测值。仅存在两个位置,但是在第二列中的每个位置都有许多样本。我想对表进行转换,以使该位置成为列标题,并且按索引范围将所需数量的样本堆叠在适当的位置。

下面的脚本显示了我想做什么。

在此先感谢您的帮助。

df <- data.frame(col1 = rep(c("A","B"), each = 5), col2 = 1:10)
df2 <- acast(df, col2 ~ col1, value.var = "col2")

Input

当前输出中有一堆NA值。 Output

所需的输出是:

# A B
  1 6
  2 7
  3 8
  4 9
  5 10

1 个答案:

答案 0 :(得分:1)

尝试一下:

df <- data.frame(col1 = rep(c("A","B", "C"), each = 5), col2 = 1:15)
do.call(cbind, split(df$col2, df$col1 ))

输入

#    col1 col2
# 1     A    1
# 2     A    2
# 3     A    3
# 4     A    4
# 5     A    5
# 6     B    6
# 7     B    7
# 8     B    8
# 9     B    9
# 10    B   10
# 11    C   11
# 12    C   12
# 13    C   13
# 14    C   14
# 15    C   15

输出

#      A  B  C
# [1,] 1  6 11
# [2,] 2  7 12
# [3,] 3  8 13
# [4,] 4  9 14
# [5,] 5 10 15

如果您需要第一个N观测值,例如3,则可以执行以下操作:

 do.call(cbind, split(df$col2, df$col1 ))[1:3, ]