R 根据唯一值将单个列分隔为多个列
假设您有一个如下所示的数据表R 根据唯一值将单个列分隔为多个列,r,dplyr,tidyr,data-cleaning,tidy,R,Dplyr,Tidyr,Data Cleaning,Tidy,假设您有一个如下所示的数据表 name time a2 b2 c6 h9 g8 cat 2012 2321 NA NA NA NA dog 1980 NA 424 NA NA NA cat 2101 NA NA 34 NA NA moose 2310 NA NA 5.6 NA NA dog 1972 NA NA NA 34 NA lion 1982 NA NA NA
name time a2 b2 c6 h9 g8
cat 2012 2321 NA NA NA NA
dog 1980 NA 424 NA NA NA
cat 2101 NA NA 34 NA NA
moose 2310 NA NA 5.6 NA NA
dog 1972 NA NA NA 34 NA
lion 1982 NA NA NA NA 12
我为糟糕的格式表示歉意
name time code val
cat 2012 a2 2321
dog 1980 b2 424
cat 2101 c6 34
moose 2310 c6 5.6
dog 1972 h9 34
lion 1982 g8 12
我想让它得到所有唯一的代码,这样表格就可以这样排列
name time a2 b2 c6 h9 g8
cat 2012 2321 NA NA NA NA
dog 1980 NA 424 NA NA NA
cat 2101 NA NA 34 NA NA
moose 2310 NA NA 5.6 NA NA
dog 1972 NA NA NA 34 NA
lion 1982 NA NA NA NA 12
有人能描述一下我在R如何做到这一点吗?您不必提供任何代码,但一些关于如何做到这一点的指示会很好。我正在使用的数据集要大得多,可能包含许多重复项
任何建议都将不胜感激
感谢您阅读
重塑2
使这些转换非常简单
require(reshape2)
df1 <- structure(list(name = structure(c(1L, 2L, 1L, 4L, 2L, 3L), .Label = c("cat",
"dog", "lion", "moose"), class = "factor"), time = c(2012L, 1980L,
2101L, 2310L, 1972L, 1982L), code = structure(c(1L, 2L, 3L, 3L,
5L, 4L), .Label = c("a2", "b2", "c6", "g8", "h9"), class = "factor"),
val = c(2321, 424, 34, 5.6, 34, 12)), .Names = c("name",
"time", "code", "val"), class = "data.frame", row.names = c(NA,
-6L))
dcast(df1, name + time ~ code, value.var="val")
name time a2 b2 c6 g8 h9
1 cat 2012 2321 NA NA NA NA
2 cat 2101 NA NA 34.0 NA NA
3 dog 1972 NA NA NA NA 34
4 dog 1980 NA 424 NA NA NA
5 lion 1982 NA NA NA 12 NA
6 moose 2310 NA NA 5.6 NA NA
我只是在这里添加了@Mako212已经提到的
spread
的工作示例:
库(tidyverse)
分布百分比(代码,val)
#>#tibble:6 x 7
#>命名时间a2 b2 c6 g8 h9
#> *
#>1类2012 2321不适用
#>2类2101 NA 34.0 NA NA
#>3只狗1972年那那那34
#>4只狗1980 NA 424 NA NA NA
#>5狮子1982 NA NA 12 NA
#>6驼鹿2310北美5.6北美
如果在示例输出中维护行顺序很重要,那么在使用排列之前,只需将行名称添加到列()
:
df%>%
行名称到列()%>%
排列(代码,val)
#>#tibble:6 x 8
#>行名名称时间a2 b2 c6 g8 h9
#> *
#>1 1 cat 2012 2321不适用
#>2两只狗1980年不知道424不知道不知道
#>3 3类2101 NA 34.0 NA NA
#>4 4驼鹿2310北美5.6北美
#>5 5狗1972不,不,不,不,34
#>6狮子1982 NA NA NA 12 NA