如何拆分数据框,应用某些功能并将其放回原处?

用户名

通常,我有一个包含数字变量和分类变量的数据框,并且我想根据分类变量拆分数字变量,执行一些操作,然后以数据框的形式将其放回原处。该运算取决于类别中数值向量的整个部分,有时会返回不同长度的向量。我知道如何以丑陋的方式执行此操作(请参见下面的示例),但这似乎是一种常见的操作,所以我想知道是否有一种我不知道的简单方法。我特别想知道是否有使用的解决方案tidyverse

这是我正在谈论的示例。

df = data.frame(y=1:10, g=rep(c("a", "b"), each=5))

假设我想将分类变量的每个级别的变量标准化为y0到1之间这是执行此操作的一般方法:

do.call(
    rbind,
    lapply(unique(df$g),
           function(level) {
               y.current = df$y[df$g==level]

               ## perform some operation
               y.new = (y.current-min(y.current))/
                   (max(y.current)-min(y.current))

               return(data.frame(y=y.new,
                                 g=level))
           }
           )
)

这需要大量的输入并且不是很可读。有没有更好的办法?

编辑:感谢您的伟大答案。我唯一仍然感兴趣的是使用tidyverse如果我们改变的例子的操作,其中的数值矢量的大小被减小,但大于一,则group_by/ mutate/summarize组合不起作用。例如,假设我要删除每个组中的最大值。我可以

library(dplyr)
df = data.frame(y=1:10, g=rep(c("a", "b"), each=5))
trans_df = df %>%
    group_by(g) %>%
    do(y=.$y[-which.max(.$y)])

变换后的数据帧trans_df具有每个级别只有一个观察值的分组变量,并且变换后的变量作为分组变量的每个级别的列表。我可以使用base R将它放在原始格式中

data.frame(g=rep(trans_df$g, times=sapply(trans_df$y, length)),
           y=do.call(c, trans_df$y))

但是我该如何使用tidyverse呢?

里卡多·费尔南德斯·坎波斯

使用data.table:

library(data.table)
df=as.data.table(df)
df[,(y-min(y))/(max(y)-min(y)),by=g]
    g   V1
 1: a 0.00
 2: a 0.25
 3: a 0.50
 4: a 0.75
 5: a 1.00
 6: b 0.00
 7: b 0.25
 8: b 0.50
 9: b 0.75
10: b 1.00

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何拆分数据框值并将函数应用于列表的内容

如何拆分元组并将其保存到数据框

如何将包含所有颜色的富文本框的文本保存到 json 中以将其放回原处

如何拆分数据框并将拆分的部分附加到新列中?

如何拆分数据并将其分配到指定的变量中?

如何使用某些列的某些子级别拆分数据帧并在 tidyverse 中应用模型

PHP-从HTML提取文本,进行翻译并将其放回原处

Python:提取矩阵的上三角部分并将其放回原处

修改与正则表达式匹配的子字符串并将其放回原处

为什么清除画布元素并将其放回原处会导致故障?

编辑/样式化文件/数组中的文本并将其放回原处,是否样式化?

如何拆分数据框中的列并将每个值存储为新行(在熊猫中)?

在某些情况下拆分数据框

如何将文本从前 50 个单词缩短并将其放回细节功能 Javascript?

如何从Access数据库中检索某些数据并将其显示在组合框中

如何拆分值列并将其附加到数据框熊猫中?

如何重新部署IntelliJ并将所有必需的文件放回原处?

应用方法后拆分数据框列

如何拆分数据?

熊猫-替换数据中的%号并将其放回

如何从插入符号包拆分数据的createDataPartition功能?

Scala:如何按行号拆分数据框?

如何基于列行拆分数据框

如何拆分数据框中的列值

如何根据特定列的特定文本拆分数据框

如何通过重复索引拆分数据框并枚举?

如何拆分数据框列并相应地复制行?

如何按名称拆分数据框的列?

如何拆分数据框的列并对其进行整形?