r - 旋转数据框并排除 r 中的空白单元格
问题描述
dat
给定以下形式的数据框:
property_id tenant count
1 1 Burlington Coat Factory 1
2 1 Macy's 2
3 1 Sears 3
4 1 AMC Theatres 4
5 1 Macy's Home 5
6 2 Burlington Coat Factory 1
7 2 JCPenney 2
8 2 Value City 3
我们怎样才能产生以下结果?
property_id X1 X2 X3 X4 X5
1 Burlington Coat Factory Macy's Sears AMC Theatres Macy's Home
2 Burlington Coat Factory JCPenney Value City <NA> <NA>
融化/重塑似乎会产生巨大的主要是稀疏矩阵。
我已经非常麻烦地使用了以下方法,但这很糟糕,我正在寻找更好的方法:
df<-data.frame(matrix(NA,1167,20))
df['id']<-unique(dat$property_id)
for(i in seq(1:dim(df)[1])){
df[i,1:length(subset(dat,dat$property_id==df[i,'id'])$tenant)]<-t(subset(dat,dat$property_id==df[i,'id'])$tenant)
}
解决方案
spread
似乎给出了你需要的东西:
library(tidyverse)
spread(dat, count, tenant)
# A tibble: 2 x 6
# property_id `1` `2` `3` `4` `5`
# <dbl> <chr> <chr> <chr> <chr> <chr>
# 1 1 Burlington Coat Factory Macy's Sears AMC Theatres Macy's Home
# 2 2 Burlington Coat Factory JCPenney Value City NA NA
另外的选择:
library(reshape2)
dcast(dat, property_id ~ count, value.var = "tenant")
# property_id 1 2 3 4 5
# 1 1 Burlington Coat Factory Macy's Sears AMC Theatres Macy's Home
# 2 2 Burlington Coat Factory JCPenney Value City <NA> <NA>
最后:
reshape(dat, v.names = "tenant", idvar = "property_id", timevar = "count", direction = "wide")
# property_id tenant.1 tenant.2 tenant.3 tenant.4 tenant.5
# 1 1 Burlington Coat Factory Macy's Sears AMC Theatres Macy's Home
# 6 2 Burlington Coat Factory JCPenney Value City <NA> <NA>
推荐阅读
- python - 如何编写具有特定模式的数据文件?
- java - 调用 Azure 事件中心并面临连接错误时客户端挂起
- reactjs - 是否可以使用 React Spring 为删除线设置动画?
- python - 基于 3 个数据框有条件地创建数据框
- javascript - Jquery 数据表的功能不起作用
- python - Excel文件中的颜色行迭代
- reactjs - React - 长时间异步 POST 请求后更新 UI 的最佳策略
- python - 有没有办法破坏 tkinter 中的 matplotlib 人物?
- sql - INSERT SELECT 语句只有一列用于 SELECT
- wso2 - WSO2 APIM Analytics 3.1.0 服务器的仪表板配置文件在启动时出错并且分析仪表板未打开