使用Send()或其他重塑函数,使用多个度量值列从长到宽重塑数据

编程入门 行业动态 更新时间:2024-10-28 14:37:29
本文介绍了使用Send()或其他重塑函数,使用多个度量值列从长到宽重塑数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我知道这里已经有很多关于这个话题的问题了。但在我看了几本书后,所有的书都只有一篇《测量》栏目。我仍然不知道如何处理我的数据。

我的数据如下所示,X1、X2表示不同的地区。因此,此数据集中的每一列代表为单个地区收集的所有年龄。

age X1 X2 age 0 2 2 age 1 2 2 age 2 2 3 ...

我要将数据重塑为宽形式:

age 0 age 1 age 2 X1 2 2 2 X2 2 2 3 ...

若要重新创建数据集,请使用

data <-structure(list(age = c("age 0", "age 1", "age 2", "age 3", "age 4", "age 5", "age 6", "age 7", "age 8", "age 9", "age 10", "age 11", "age 12"), X1 = c(2, 2, 2, 4, 7, 12, 19, 22, 18, 11, 6, 3, 3), X2 = c(2, 2, 3, 4, 8, 14, 21, 24, 20, 12, 7, 4, 3)), row.names = c("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ), class = "data.frame")

转置起作用:

rownames(data)<- data[,1] wide <- t(data)[2:3,]

但我想知道如何使用Send()或其他重塑函数来完成此操作。

library(tidyr) wide <- spread(data, age, X1) #X2 remains the same, and X1 is not correcty reshaped. wide <- spread(data, age, X1, X2) #Error in spread.data.frame(data, age, X1, X2) : object 'X2' not found 推荐答案

下面的tidyr解决方案。您需要将区域收集到单个列中,才能将其展开。

library(tidyr) data %>% gather(region,val,-age) %>% spread(age,val) # region age 0 age 1 age 10 age 11 age 12 age 2 age 3 age 4 age 5 age 6 age 7 age 8 age 9 # 1 X1 2 2 6 3 3 2 4 7 12 19 22 18 11 # 2 X2 2 2 7 4 3 3 4 8 14 21 24 20 12

更多推荐

使用Send()或其他重塑函数,使用多个度量值列从长到宽重塑数据

本文发布于:2023-07-09 15:05:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1087177.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   或其他   度量   函数   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!