首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R对数据资产进行统一存储

如何使用R对数据资产进行统一存储
EN

Stack Overflow用户
提问于 2019-07-20 22:49:34
回答 2查看 118关注 0票数 0

这是用于创建虚拟对象的libraryI

代码语言:javascript
复制
install.packages("fastDummies")
library(fastDummies)

这是数据集

代码语言:javascript
复制
winners <- data.frame(
          city = c("SaoPaulito", "NewAmsterdam", "BeatifulCow"),
          year = c(1990, 2000, 1990),
          crime = 1:3)

让他们在这些城市中创建超级假人:

代码语言:javascript
复制
dummy_cols(winners, select_columns = c("city"))

结果是

代码语言:javascript
复制
city year crime city_SaoPaulito city_NewAmsterdam city_BeatifulCow
1   SaoPaulito 1990     1               1                 0                0
2 NewAmsterdam 2000     2               0                 1                0
3  BeatifulCow 1990     3               0                 0                1

那么问题是,如果我想返回到之前的数据集,有什么想法吗?

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2019-07-20 22:51:30

我们可以使用dcast

代码语言:javascript
复制
library(data.table)
dcast(setDT(winners), crime ~ city, length)

如果我们需要获取输入,它将是

代码语言:javascript
复制
subset(df1, select = 1:3)
#         city year crime
#1   SaoPaulito 1990     1
#2 NewAmsterdam 2000     2
#3  BeatifulCow 1990     3

或使用melt

代码语言:javascript
复制
melt(setDT(df1), measure = patterns("_"))[value == 1, .(city, year, crime)]
#          city year crime
#1:   SaoPaulito 1990     1
#2: NewAmsterdam 2000     2
#3:  BeatifulCow 1990     3

数据

代码语言:javascript
复制
df1 <- structure(list(city = c("SaoPaulito", "NewAmsterdam", "BeatifulCow"
), year = c(1990L, 2000L, 1990L), crime = 1:3, city_SaoPaulito = c(1L, 
0L, 0L), city_NewAmsterdam = c(0L, 1L, 0L), city_BeatifulCow = c(0L, 
0L, 1L)), class = "data.frame", row.names = c("1", "2", "3"))
票数 2
EN

Stack Overflow用户

发布于 2019-07-20 23:01:49

如果每行中只有一个city作为1,则可以跳过虚拟列

代码语言:javascript
复制
df[, 1:3]


#           city year crime
#1   SaoPaulito 1990     1
#2 NewAmsterdam 2000     2
#3  BeatifulCow 1990     3

如果您可以拥有多个城市,那么使用dplyrtidyr::gather的一种方式是

代码语言:javascript
复制
library(dplyr)

df %>%
  tidyr::gather(key, value, starts_with("city_")) %>%
  filter(value == 1) %>%
  select(-value, -key)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57125793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档