首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将( dplyr tbl-对象的)列转换为tbl头。

将( dplyr tbl-对象的)列转换为tbl头。
EN

Stack Overflow用户
提问于 2016-04-23 01:51:52
回答 3查看 121关注 0票数 1

我有一个data.frame如下所示:

代码语言:javascript
复制
     types       long_name
     (chr)           (chr)
1  neighborhood Upper East Side
2  sublocality  Manhattan
3  postal_code  10021

我想对它作如下修改:

代码语言:javascript
复制
     neighborhood    sublocality   postal_code
     (chr)           (chr)         (chr)
1  Upper East Side   Manhattan     10021

必须有一种快速而简单的方法来做到这一点。

编辑注意:这不是作为一个R数据note显示的,而是显示为一个dply对象:

代码语言:javascript
复制
dput(as.tbl(dfrm))
structure(list(types = c("neighborhood", "sublocality", "postal_code"
), long_name = c("Upper East Side", "Manhattan", "10021")), .Names = c("types", 
"long_name"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-23 02:41:42

坚持使用Hadleyverse,我们可以使用tidyr::spread从长到宽:

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

df %>% spread(types, long_name)
# Source: local data frame [1 x 3]
# 
#      neighborhood postal_code sublocality
#             (chr)       (chr)       (chr)
# 1 Upper East Side       10021   Manhattan
票数 2
EN

Stack Overflow用户

发布于 2016-04-23 02:00:29

types设置为long_name向量上的名称,然后在其上运行as.data.frame.list()。假设df是您的数据框架..。

代码语言:javascript
复制
as.data.frame.list(
    with(df, setNames(long_name, types)), 
    stringsAsFactors = FALSE
)
#      neighborhood sublocality postal_code
# 1 Upper East Side   Manhattan       10021

或者,同样的事情有点不同的方式.

代码语言:javascript
复制
as.data.frame(
    with(df, setNames(as.list(long_name), types)),
    stringsAsFactors = FALSE
)

如果需要数字邮政编码,请在该列上运行as.numeric()。此外,由于您使用的是dplyr,所以您可以通过在tbl_df()中包装这个结果来获得您的确切愿望结果。或者你可以在dplyr中做所有的事情,比如

代码语言:javascript
复制
df %>%
    do(
        as.data.frame.list(
            setNames(.$long_name, .$types), 
            stringsAsFactors = FALSE
        )
    ) %>%
    tbl_df
# Source: local data frame [1 x 3]
#
#      neighborhood sublocality postal_code
#             (chr)       (chr)       (chr)
# 1 Upper East Side   Manhattan       10021

数据:

代码语言:javascript
复制
df <- structure(list(types = c("neighborhood", "sublocality", "postal_code"
), long_name = c("Upper East Side", "Manhattan", "10021")), .Names = c("types", 
"long_name"), row.names = c(NA, -3L), class = c("tbl_df", "tbl", 
"data.frame"))
票数 2
EN

Stack Overflow用户

发布于 2016-04-23 02:13:29

我们可以使用transpose

代码语言:javascript
复制
library(data.table)
setNames(transpose(df[-1]), df$types)
#     neighborhood sublocality postal_code
#1 Upper East Side   Manhattan       10021
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36805724

复制
相关文章

相似问题

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