首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在r中解冻数据的最佳方法

在r中解冻数据的最佳方法
EN

Stack Overflow用户
提问于 2020-09-20 20:39:02
回答 2查看 285关注 0票数 1

我的数据看起来就像

代码语言:javascript
运行
复制
df <- data.frame(Role = c("a","a","b", "b", "c", "c"), Men = c(1,0,3,1,2,4), Women = c(2,1,1,4,3,1)) 
df.melt <- melt(df)

我只能访问看起来像df.melt的版本,如何在df表单中获得它?

使用dcast只会给我带来错误,我无法理解它的语法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-20 20:41:38

我们需要一个序列列来指定行,因为melt‘变量中有重复的行

代码语言:javascript
运行
复制
library(tidyr)
library(dplyr)
library(data.table)
df.melt %>%
   mutate(rn = rowid(variable)) %>%
   pivot_wider(names_from = variable, values_from = value) %>%
   select(-rn)
# A tibble: 6 x 3
#  Role    Men Women
#  <chr> <dbl> <dbl>
#1 a         1     2
#2 a         0     1
#3 b         3     1
#4 b         1     4
#5 c         2     3
#6 c         4     1

如果我们正在寻找“最佳”方式的有效途径,来自data.tabledata.table是快速的。

代码语言:javascript
运行
复制
library(data.table)
dcast(setDT(df.melt), rowid(variable) + Role ~
     variable, value.var = 'value')[, variable := NULL][]
#   Role Men Women
#1:    a   1     2
#2:    a   0     1
#3:    b   3     1
#4:    b   1     4
#5:    c   2     3
#6:    c   4     1
票数 3
EN

Stack Overflow用户

发布于 2020-09-20 20:58:43

下面是使用unstack的基本R选项

代码语言:javascript
运行
复制
cbind(
  Role = df.melt[1:(nrow(df.melt) / length(unique(df.melt$variable))), 1],
  unstack(rev(df.melt[-1]))
)

这给

代码语言:javascript
运行
复制
  Role Men Women
1    a   1     2
2    a   0     1
3    b   3     1
4    b   1     4
5    c   2     3
6    c   4     1

另一种选择是使用reshape

代码语言:javascript
运行
复制
subset(
  reshape(
    transform(
      df.melt,
      id = ave(1:nrow(df.melt), Role, variable, FUN = seq_along)
    ),
    direction = "wide",
    idvar = c("Role", "id"),
    timevar = "variable"
  ),
  select = -id
)

这给

代码语言:javascript
运行
复制
  Role value.Men value.Women
1    a         1           2
2    a         0           1
3    b         3           1
4    b         1           4
5    c         2           3
6    c         4           1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63983434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档