好的,这似乎有点简单,但是我是R菜鸟,似乎无法弄清楚。
我从带有两列的csv文件中读取了一个表,其中第一列是位置名称,后跟该位置的观测值。仅存在两个位置,但是在第二列中的每个位置都有许多样本。我想对表进行转换,以使该位置成为列标题,并且按索引范围将所需数量的样本堆叠在适当的位置。
下面的脚本显示了我想做什么。
在此先感谢您的帮助。
df <- data.frame(col1 = rep(c("A","B"), each = 5), col2 = 1:10)
df2 <- acast(df, col2 ~ col1, value.var = "col2")
当前输出中有一堆NA值。 Output
所需的输出是:
# A B
1 6
2 7
3 8
4 9
5 10
答案 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, ]