重塑数据框以将因子转换为R中的列

Ale*_*off 15 r factors reshape

我有一个数据框,其中一个特定列具有一组特定值(比方说,1,2,...,23).我想要做的是从这个布局转换为一个框架,其中框架将有额外的23(在这种情况下)列,每个列代表一个因子值.这些列中的数据将是布尔值,表示特定行是否具有给定的因子值...要显示特定示例:

来源框架:

ID       DATE         SECTOR
123      2008-01-01   1
456      2008-01-01   3
789      2008-01-02   5
... <more records with SECTOR values from 1 to 5>
Run Code Online (Sandbox Code Playgroud)

所需格式:

ID       DATE         SECTOR.1   SECTOR.2   SECTOR.3   SECTOR.4   SECTOR.5
123      2008-01-01      T          F          F          F          F
456      2008-01-01      F          F          T          F          F
789      2008-01-02      F          F          F          F          T
Run Code Online (Sandbox Code Playgroud)

我在循环中做这个没有问题,但我希望有更好的方法.到目前为止reshape()没有产生预期的结果.非常感谢帮助.

Sha*_*ane 15

我会尝试绑定另一个名为"value"的列并设置value = TRUE.

df <- data.frame(cbind(1:10, 2:11, 1:3))
colnames(df) <- c("ID","DATE","SECTOR")
df <- data.frame(df, value=TRUE)
Run Code Online (Sandbox Code Playgroud)

然后做一个重塑:

reshape(df, idvar=c("ID","DATE"), timevar="SECTOR", direction="wide")
Run Code Online (Sandbox Code Playgroud)

使用该reshape函数的问题是缺失值的缺省值是NA(在这种情况下,您将必须迭代并用FALSE替换它们).

否则,您可以castreshape包中使用(请参阅此问题以获取示例),并将默认值设置为FALSE.

df.wide <- cast(df, ID + DATE ~ SECTOR, fill=FALSE)
> df.wide 
   ID DATE     1     2     3
1   1    2  TRUE FALSE FALSE
2   2    3 FALSE  TRUE FALSE
3   3    4 FALSE FALSE  TRUE
4   4    5  TRUE FALSE FALSE
5   5    6 FALSE  TRUE FALSE
6   6    7 FALSE FALSE  TRUE
7   7    8  TRUE FALSE FALSE
8   8    9 FALSE  TRUE FALSE
9   9   10 FALSE FALSE  TRUE
10 10   11  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

  • 不要被这些函数欺骗:`reshape`函数本身如果你看它就会迭代.但它除此之外还有很多其他功能,这将增加整体时间.像'reshape`这样的东西并不是为了表现更好; 它们只是为了使数据操作更容易. (3认同)
  • 谢谢.我应该考虑创建一个值列.有趣的是,值列/重塑方法在9,500行上有1.4秒,有26个因子级别,而使用迭代方法(超过级别)只需0.6秒. (2认同)