我已经阅读了几个与我的问题类似的问题,但实际上并没有回答我的难题。我有一个由2列组成的数据集:在第一列上,有x个用户名,每组重复100次(即,如果有4个用户名,则它们在名为“ user”的列下生成400行),而在第2列下,每个用户名对应的唯一字符串。我想将UNIQUE用户名从行转换为列,但保持col2中的所有值而不进行聚合。为简单起见,我在下面添加了虹膜数据集的一个小样本。本质上,我想重塑一下:
Species Petal.Width
setosa 0.2
setosa 0.2
setosa 0.4
versicolor 1.4
versicolor 1.3
versicolor 1.0
对此:
setosa versicolor
0.2 1.4
0.2 1.3
0.4 1.0
无需手动设置数据,因为会有多个用户名,并且代码可能很冗长,难以完成。它实际上是列的替换(在上面的示例中从Species到setosa和versicolor)。有人可以让我知道是否有一种快速的方法来达到这个结果?谢谢!
答案 0 :(得分:1)
我们可以使用dplyr
和tidyr
来转换数据帧。
library(dplyr)
library(tidyr)
dat2 <- dat %>%
group_by(Species) %>%
mutate(ID = 1:n()) %>%
spread(Species, Petal.Width) %>%
select(-ID)
dat2
# # A tibble: 3 x 2
# setosa versicolor
# <dbl> <dbl>
# 1 0.2 1.4
# 2 0.2 1.3
# 3 0.4 1
数据
dat <- read.table(text = "Species Petal.Width
setosa 0.2
setosa 0.2
setosa 0.4
versicolor 1.4
versicolor 1.3
versicolor 1.0",
header = TRUE, stringsAsFactors = FALSE)