R:将多行重新分组为一行(按第一列中的值)

R:将多行重新分组为一行(按第一列中的值),r,R,我有一个来自R中导入的CSV的数据帧,例如: Salmon 6 Salmon 4 Salmon 7 Trout 2 Trout 3 Trout 2 我想重新安排: Salmon 6 4 7 Trout 2 3 2 转置后的值分别位于一个新列中。您可以使用聚合: aggregate(V2 ~ V1, data = mydata, c) # V1 V2.1 V2.2 V2.3 # 1 Salmon 6 4 7 # 2 Trout

我有一个来自R中导入的CSV的数据帧,例如:

Salmon  6
Salmon  4
Salmon  7
Trout   2
Trout   3
Trout   2
我想重新安排:

Salmon  6  4  7

Trout  2  3  2

转置后的值分别位于一个新列中。

您可以使用
聚合

aggregate(V2 ~ V1, data = mydata, c)

#       V1 V2.1 V2.2 V2.3
# 1 Salmon    6    4    7
# 2  Trout    2    3    2
数据:


这里有一个使用
dcast

library(data.table)
dcast(setDT(mydata), V1~paste0("VN", rowid(V1)), value.var = 'V2')
#       V1 VN1 VN2 VN3
#1: Salmon   6   4   7
#2:  Trout   2   3   2
数据
mydata我正试图使用
spread()
这看起来更简单<代码>排列()
将返回并出错。谢谢。这似乎将所有数值聚合到V2中的单个向量中。e、 g.第2列变为c(4,7,2)
library(data.table)
dcast(setDT(mydata), V1~paste0("VN", rowid(V1)), value.var = 'V2')
#       V1 VN1 VN2 VN3
#1: Salmon   6   4   7
#2:  Trout   2   3   2
mydata <- structure(list(V1 = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Salmon", 
"Trout"), class = "factor"), V2 = c(6L, 4L, 7L, 2L, 3L, 2L)), .Names = c("V1", 
"V2"), class = "data.frame", row.names = c(NA, -6L))