【问题标题】:Convert standard data to wide format?将标准数据转换为宽格式?
【发布时间】:2020-05-28 17:21:59
【问题描述】:

我的数据如下所示: Sort of like a standard data format

如何在 RStudio 中将其转换为这种格式? Wide Format

抱歉,我不知道如何在这里创建表格。

对于每一列,还有许多其他值。对于每个值,我想将其转换为一列。 (例如,状态栏可以有“离婚”、“丧偶”等)

【问题讨论】:

  • 提供dput()格式的数据,而不是图片的形式。
  • 您好,欢迎来到社区。请阅读dcast 或cast 。希望这能解决您的问题。
  • 舒检查下面的答案,它会帮助你。我还放了一行代码来描述如何创建表格。
  • 是的@yogesh。你的回答是正确的,对我也有帮助。谢谢

标签: r transform


【解决方案1】:

假设您已将描述的表命名为 df。应用以下操作以获得所需的输出。

df <- data.frame(ID = 1:4,Status = c("Single", "Single", "Married","Married"),
                 Gender = c("M", "F", "F","F"),Age_Group =c("2","3","2","2"))


knitr::kable(df)

df$Age_Group=as.character(df$Age_Group)

df1 <- fastDummies::dummy_cols(df)

如果做了假人,则删除列。

df1=df1[,-c(2,3,4)]

View(df1)

【讨论】:

  • 您也可以利用remove_selected_columns 参数。
【解决方案2】:

使用@Yogesh 创建的示例数据集,您可以使用以下代码来重塑数据。我使用了reshape 包中的melt 函数和tidyr 包中的spread 函数。

df <- data.frame(ID = 1:4,Status = c("Single", "Single", "Married","Married"),
             Gender = c("M", "F", "F","F"),Age_Group =c("2","3","2","2"))
df2 <- reshape::melt(df, id = c("ID"))
df2$new_col <- paste0(df2$variable, "-", df2$value)
df2 <- df2[, !(names(df2) %in% c("variable", "value"))]
df3 <- as.data.frame(table(df2$ID, df2$new_col))
df4 <- tidyr::spread(x, Var2, Freq)
colnames(df4)[1] <- "ID"
df4

这是上面代码生成的输出-

  ID Age_Group-2 Age_Group-3 Gender-F Gender-M Status-Married Status-Single
1  1           1           0        0        1              0             1
2  2           0           1        1        0              0             1
3  3           1           0        1        0              1             0
4  4           1           0        1        0              1             0

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2021-07-20
    • 2019-01-12
    相关资源
    最近更新 更多