首页 > 解决方案 > 一次对多列进行采样并返回聚合数据框

问题描述

我有一个如下所示的数据集:

Column 1   Column 2   Column 3    Column 4
  Male        35        USA         DC
  Female      10        USA         NYC

我已经聚合了这个数据框来计算每列中唯一值的数量以及总行数的相应百分比。

所以我的新数据框如下所示:

我有一个看起来像这样的数据框(这只是示例):

  Column Name   Nominal  Percent 
1 Col1             3      1.00
2 Col2          69333    99.51
3 Col3          65766    94.40
4 Col4          60727    87.16

我想要的第二个数据框是创建第三列 - 示例模式。新列应该是每一列的样本。像这样:

  Column Name   Nominal  Percent  Sample_1
1 Col1             3       1.00     Male
2 Col2           69333     99.51    25

我不记得如何为每一列自动关闭它。我不想手动输入每个列名。有什么提示吗?

标签: r

解决方案


为了完整性。

数据,稍作修改以使其一致且对 R 友好(无空格):

origdat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
Column_1   Column_2   Column_3    Column_4
  Male        35        USA         DC
  Female      10        USA         NYC')

newdat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
  Column_Name   Nominal  Percent 
1 Column_1          3      1.00
2 Column_2       69333    99.51
3 Column_3       65766    94.40
4 Column_4       60727    87.16')

详细方法,使用临时data.frame存储采样:

set.seed(2)
tempdat <- data.frame(Column_Name = names(origdat),
                      Sample_1 = sapply(origdat, sample, size=1),
                      stringsAsFactors=FALSE)

将其与基础 R 合并:

merge(newdat, tempdat, by="Column_Name", all=TRUE)
#   Column_Name Nominal Percent Sample_1
# 1    Column_1       3    1.00     Male
# 2    Column_2   69333   99.51       10
# 3    Column_3   65766   94.40      USA
# 4    Column_4   60727   87.16       DC

合并dplyr

dplyr::left_join(newdat, tempdat, by="Column_Name")
#   Column_Name Nominal Percent Sample_1
# 1    Column_1       3    1.00     Male
# 2    Column_2   69333   99.51       10
# 3    Column_3   65766   94.40      USA
# 4    Column_4   60727   87.16       DC

推荐阅读