在R中,我有以下数据帧:
Name Category
1 Beans 1.12.5
2 Pears 5.7.9
3 Eggs 10.6.5
Run Code Online (Sandbox Code Playgroud)
我想要的是以下内容:
Name Cat1 Cat2 Cat3
1 Beans 1 12 5
2 Pears 5 7 9
3 Eggs 10 6 5
Run Code Online (Sandbox Code Playgroud)
理想情况下,在plyr中构建的一些表达式会很好......
我会调查我的一面,但搜索这个可能需要我很多时间,我只是想知道你们中有些人是否有一些提示来执行此操作......
我已经编写了一个函数concat.split(实际上是函数的"族")作为我的splitstackshape包的一部分来处理这些类型的问题:
# install.packages("splitstackshape")
library(splitstackshape)
concat.split(mydf, "Category", ".", drop=TRUE)
# Name Category_1 Category_2 Category_3
# 1 Beans 1 12 5
# 2 Pears 5 7 9
# 3 Eggs 10 6 5
Run Code Online (Sandbox Code Playgroud)
它也可以很好地处理"不平衡"数据.
dat <- data.frame(Name = c("Beans", "Pears", "Eggs"),
Category = c("1.12.5", "5.7.9.8", "10.6.5.7.7"))
concat.split(dat, "Category", ".", drop = TRUE)
# Name Category_1 Category_2 Category_3 Category_4 Category_5
# 1 Beans 1 12 5 NA NA
# 2 Pears 5 7 9 8 NA
# 3 Eggs 10 6 5 7 7
Run Code Online (Sandbox Code Playgroud)
因为在这些类型的情况下经常需要"长"或"熔化"数据,所以该concat.split.multiple函数也有一个"长"参数:
concat.split.multiple(dat, "Category", ".", direction = "long")
# Name time Category
# 1 Beans 1 1
# 2 Pears 1 5
# 3 Eggs 1 10
# 4 Beans 2 12
# 5 Pears 2 7
# 6 Eggs 2 6
# 7 Beans 3 5
# 8 Pears 3 9
# 9 Eggs 3 5
# 10 Beans 4 NA
# 11 Pears 4 8
# 12 Eggs 4 7
# 13 Beans 5 NA
# 14 Pears 5 NA
# 15 Eggs 5 7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |