将R中数据帧的行转换为列
我有一个这样的数据集将R中数据帧的行转换为列,r,dataframe,reshape,R,Dataframe,Reshape,我有一个这样的数据集 movieID title year country genre directorName Rating actorName1 actorName.2 1 hello 1995 USA action john smith 6 tom hanks charlie sheen 2 MI2 1997 USA ac
movieID title year country genre directorName Rating actorName1 actorName.2
1 hello 1995 USA action john smith 6 tom hanks charlie sheen
2 MI2 1997 USA action mad max 8 tom cruize some_body
3 MI2 1997 USA thriller mad max 8 tom cruize some_body
基本上,有许多行只是有一个不同的用户给定的流派,我想列有genre1,genre2
我尝试了重塑(),但它只能基于某个ID变量进行转换。如果有人有任何想法,请让我知道尝试使用dplyr和tidyr:
library(tidyr)
library(dplyr)
df %>% mutate(yesno=1) %>% spread(genre, yesno, fill=0)
这将创建一个列yesno,该列仅为每种类型提供一个要填写的值。然后我们可以使用tidyr的spread。fill=0意味着用0代替NA来填充那些不属于该类型的内容
之前:
genre title yesno
1 action lethal weapon 1
2 thriller shining 1
3 action taken 1
4 scifi alien 1
之后:
title action scifi thriller
1 alien 0 1 0
2 lethal weapon 1 0 0
3 shining 0 0 1
4 taken 1 0 0
使用dplyr和tidyr尝试以下操作:
library(tidyr)
library(dplyr)
df %>% mutate(yesno=1) %>% spread(genre, yesno, fill=0)
这将创建一个列yesno,该列仅为每种类型提供一个要填写的值。然后我们可以使用tidyr的spread。fill=0意味着用0代替NA来填充那些不属于该类型的内容
之前:
genre title yesno
1 action lethal weapon 1
2 thriller shining 1
3 action taken 1
4 scifi alien 1
之后:
title action scifi thriller
1 alien 0 1 0
2 lethal weapon 1 0 0
3 shining 0 0 1
4 taken 1 0 0
如果您了解restrape()
查看数据的镜头,可以使用restrape()
执行此操作
背景
首先,在数据管理的上下文中考虑“<强>记录>强”的概念。通常,在数据表中,每条记录都应对应于定义良好的数据单元,简称为记录单元,其中一列或多列作为标识或关键变量,用于区分记录单元的唯一实例
通常,单位由一组标量变量描述。换句话说,每个记录都与一个或多个标量值相关联,每个标量值都提供有关单位的单个信息。在一个非常简单的世界中,单位的所有属性都是标量的,因此可以将每个变量表示为单个列向量,每个元素/单元对应一个记录单位,从而为该特定单位提供该特定属性的值除了属性的概念之外,识别单元的类型或分组分类是可能的,也是非常常见的。这些通常表示为单位的附加标量属性 当人们谈论表格数据的长格式与宽格式时,他们通常指的是这些类型分类在表格中的布局。数据布局的选择与表中单个记录表示的单位的选择直接相关。这实际上是一个相同的选择 例如,在一个每个个体有多个测量值的实验中,每个记录可以存储一个测量值,在多个记录上代表个体,并有一个类型列来区分测量值类型。或者,每个记录可以存储一个单独的数据,每个测量值由一个列表示。就彼此而言,前者格式较长,后者格式较宽。但是现在考虑,如果每个个体属于实验中的单个实验组,则可以将每个记录存储一个组,每个个体由一组列表示,并且每个测量由集合内的一个列表示。如果你愿意的话,这是一种“更广泛”的格式。这都是相对的
不幸的是,单位特征有时比简单的标量值更复杂。最常见的情况是多值属性,有时描述为多对一关系(特别是在DBMS的上下文中)。换句话说,属性的多个值可以与单个记录单元相关联。在这种情况下,不可能将多值属性表示为数据集中的简单列向量。程序员在尝试处理这种复杂性时,经常会遇到一些难题,例如:
- 将多个值串联为单个标量值(例如单个逗号分隔字符串或位向量)。让我们称之为“串联黑客”
- 为属性的每个值复制单位记录。(这通常只有在数据集中只有一个属性是多值的情况下才可行。)让我们称之为“复制黑客”
- 将属性拆分为自身的多个“实例”,每个实例存储在自己的列中。让我们称之为“分离黑客”
- 只是尝试忽略多个值中的一个以外的所有值。让我们称之为“无知黑客”
在我开始讨论
重塑()
之前,需要强调的是,单元类型与多值属性是完全不同的。重塑数据通常被认为是关于管理键入和记录单元选择。它不应该是关于管理多值属性布局的,但是它可以以这种方式使用,我们将看到
最抽象的,
reformate()
可用于转换一组类型化标量数据列