将级别添加到R数据框

时间:2017-10-04 14:18:08

标签: r dataframe lapply

我们假设我们有一个像这样组织的数据框/表

x$user1, x$user2, etc..

x$usern是一个包含$age, $department, $sale, $price, etc.

等属性的数据表

我想"推"并将x$usern中的数据框重新组合到一个较低级别,以便我可以在x$usern下面添加其他数据表

也许它的插图效果更好:目前的结构是

x
$user1                              $user2
$price,$age, etc.                   $price, $age, etc.      

目标结构

x
$user1                                        $user2
$data                $stat                    $data                $stat  
$price,$age, etc.    $min, $max, etc.         $price,$age, etc.    $min, $max, etc.

实现这一目标的最佳方法是什么。我正在考虑lapply和/或循环遍历所有用户,但也许有更优雅的方法来做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:1)

这似乎是lapply(或其中一个亲属)的好地方。一些模拟数据:

x <- list(
  user1 = data.frame(price = 11, age = 12),
  user2 = data.frame(price = 21, age = 22)
)
str(x)
# List of 2
#  $ user1:'data.frame':    1 obs. of  2 variables:
#   ..$ price: num 11
#   ..$ age  : num 12
#  $ user2:'data.frame':    1 obs. of  2 variables:
#   ..$ price: num 21
#   ..$ age  : num 22

转型:

newx <- lapply(x, function(l) {
  st <- data.frame(min = 0.9*min(l$price), max = 1.1*max(l$age))
  list(data = l, stat = st)
})
str(newx)
# List of 2
#  $ user1:List of 2
#   ..$ data:'data.frame':  1 obs. of  2 variables:
#   .. ..$ price: num 11
#   .. ..$ age  : num 12
#   ..$ stat:'data.frame':  1 obs. of  2 variables:
#   .. ..$ min: num 9.9
#   .. ..$ max: num 13.2
#  $ user2:List of 2
#   ..$ data:'data.frame':  1 obs. of  2 variables:
#   .. ..$ price: num 21
#   .. ..$ age  : num 22
#   ..$ stat:'data.frame':  1 obs. of  2 variables:
#   .. ..$ min: num 18.9
#   .. ..$ max: num 24.2

(显然,我对st的定义必须根据您的需求量身定制。此外,它并不一定要在lapply内定义,但如果在你已经基于x$user1$...了解它的定义。)