R:如何将数据帧转换为每一列的相对频率值?

穿

我正在尝试将由分类列和数字列组成的数据框转换为一个数据框,其中每个值代表该列内的相对频率。我需要灵活地扩展,因此使用我正在使用的数据框中列出的列名无法达到我的目的。

作为一个玩具示例,请考虑以下数据框:

df<-data.frame(fruit=c('apple','apple','pear','orange','apple','pear'),
           price=c(47,92,87,14,21,19),
           town=c('home','far','close','close','close','far'))

作为目标数据框,我希望得到以下结果:

goal<-data.frame(fruit=c(.50,.50,.33,.17,.5,.17),
                 price=c(.01,1.29,1.14,-0.93,-0.73,-0.79),
                 town=c(.17,.33,.50,.50,.50,.33))

在目标数据框中,我希望缩放数字列,并将具有分类值的列转换为该列中值的相对频率。例如,对于数据框中的六个记录中的三个,出现“苹果”,因此.50反映了列中的3/6。

我能够使用以下命令将price变量以及数据框中的所有数字列转换为z分数:

newdf <- df %>%
         mutate_if(is.numeric,scale)

这实现了我对数字列的目标,因为缩放后的值对我而言比连续标度上的值出现的次数更有趣(我将在其中使用的大多数集合都具有成千上万的小数位,而精确重复是不在那里)。

我尝试对在此答案中找到的代码进行一些细微的编辑:dplyr:将函数table()应用于data.frame的每一列,但未能实现我的目标。我怎样才能达到理想的结果?

先感谢您!

吉尔伯·乌尔比娜(Jilber Urbina)

这是另一种选择

library(qdapTools) # for `lookup` function

df %>%
  mutate_if(is.numeric,scale) %>% 
  mutate_if(is.factor, function(x) lookup(x, as.data.frame(prop.table(table(x))))) %>% 
  round(2)
#   fruit price town
# 1  0.50  0.01 0.17
# 2  0.50  1.29 0.33
# 3  0.33  1.15 0.50
# 4  0.17 -0.93 0.50
# 5  0.50 -0.73 0.50
# 6  0.33 -0.79 0.33

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将主数据帧的每一列转换为单独的数据帧?

如何将数据帧的每一列从二进制转换为字节数组

如何将列转换为行,其中每一列都有多个值?

如何将一列的每一行值转换为pandas中的列表?

当一列的值大于 r 中的另一列时,如何将数据框中的行值转换为 NA?

如何将数据框中的每一列转换为具有 ColumnName 和 ColumnValue 的行

熊猫如何将一列数据转换为另一列数据?

如何将数据帧的每一行和每一列与字符串匹配 - Python

如何将df的每一列转换为字典

如何将一列中所有值的数据框转换为多列中的数据框?

计算熊猫数据帧中一列值的频率,并用频率出现次数标记每一行

将数据帧转换为 R 中的一列长格式

如何将列表列表转换为数据框,保持另一列的分组值?

如何将一列的值转换为列标题,而其他列的值转换为行?

将一列数据帧转换为多列数据帧(Databricks、pyspark)

按列将SAS数据集转换为相对频率

如何将数据帧的列的值转换为0和1?

如何将多列数据转换为DolphinDB中的一列?

如何将R数据帧转换为长格式

如何将colSums转换为R到数据帧

R:如何将数据帧转换为nxn矩阵

如何将调查回复的数据帧转换为频率表?

如何将数据帧中每一列的数据类型存储到新数据帧的新列中

如何将具有单列的R数据帧转换为tm的语料库,以使每一行都作为文档?

如何将冒号之前的每一行转换为列和值到列名

如何将一行两列数据帧转换为多行两列数据帧

如何将数据帧中的每一列与另一个数据帧熊猫中的一行相乘?

Pyspark DataFrame - 如何将一列从分类值转换为 int?

如何将一列中的值转换为新表的标题?