我们假设我们有一个像这样组织的数据框/表
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
和/或循环遍历所有用户,但也许有更优雅的方法来做到这一点?
谢谢。
答案 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$...
了解它的定义。)