【问题标题】:How to create new table in R from an existing table in R如何从 R 中的现有表在 R 中创建新表
【发布时间】:2021-08-26 16:49:17
【问题描述】:

我有这个包含两列的数据表:

  1. 性别 - 男性或女性
  2. 分数 - 介于 0 到 100 之间

我想创建一个新表 有 2 列:

  1. 男性
  2. 女 线就是分数

如何在 R 中做到这一点?

【问题讨论】:

  • 来自@TylerGroves:你能告诉我们更多关于桌子本身的信息吗?什么数据类型,以及更多关于它的结构?从你的帖子很难看出。
  • 仅供参考,您最近的编辑(用松散的描述替换示例数据)实际上降低了问题的质量和可重复性。让人们更容易回答是相当重要的,因为它会更快地给你更多相关的答案。我建议您“回滚”您的编辑或将示例数据添加回问题中。请阅读以下关于 SO 问题中再现性的良好讨论:stackoverflow.com/q/5963269minimal reproducible examplestackoverflow.com/tags/r/info。谢谢!
  • 请不要发布代码/数据/错误的图像:它会破坏屏幕阅读器并且无法复制或搜索(参考:meta.stackoverflow.com/a/285557xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: r


【解决方案1】:

预先:我添加的rn 列是提供各种“id”,其中每个“id”的结果将只有一行。可能有一些方法可以解决它,但它确实简化了事情,无论是在执行还是在可视化正在发生的事情时(当您查看仍然存在 rn 的长版本和宽版本时)。我删除了两个答案([,-1]%>% select(-rn))中的列,因为它只是一个临时列。

基础 R

dat$rn <- ave(seq_len(nrow(dat)), dat$gender, FUN = seq_along)
reshape(dat, timevar = "gender", idvar = "rn", direction = "wide", v.names = "score")[,-1]
#   score.male score.female
# 1        100           90
# 3         80           98
# 5         75          100

dplyr

library(dplyr)
library(tidyr) # pivot_wider
dat %>%
  group_by(gender) %>%
  mutate(rn = row_number()) %>%
  pivot_wider(rn, names_from = gender, values_from = score) %>%
  select(-rn)
# # A tibble: 3 x 2
#    male female
#   <int>  <int>
# 1   100     90
# 2    80     98
# 3    75    100

数据

dat <- structure(list(score = c(100L, 90L, 98L, 80L, 75L, 100L), gender = c("male", "female", "female", "male", "male", "female"), rn = c(1L, 1L, 2L, 2L, 3L, 3L)), row.names = c(NA, -6L), class = "data.frame")

【讨论】:

    【解决方案2】:

    我们可以在base R中使用unstack

    unstack(df1, score ~ gender)
      female male
    1     90  100
    2     98   80
    3    100   75
    

    数据

    df1 <- structure(list(score = c(100L, 90L, 98L, 80L, 75L, 100L), gender = c("male", 
    "female", "female", "male", "male", "female")), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

    • 仍然没有在我的日常使用中工作unstack(.) ...
    猜你喜欢
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多