我有一个data.frame如下所示:
types long_name
(chr) (chr)
1 neighborhood Upper East Side
2 sublocality Manhattan
3 postal_code 10021我想对它作如下修改:
neighborhood sublocality postal_code
(chr) (chr) (chr)
1 Upper East Side Manhattan 10021必须有一种快速而简单的方法来做到这一点。
编辑注意:这不是作为一个R数据note显示的,而是显示为一个dply对象:
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))发布于 2016-04-23 02:41:42
坚持使用Hadleyverse,我们可以使用tidyr::spread从长到宽:
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发布于 2016-04-23 02:00:29
将types设置为long_name向量上的名称,然后在其上运行as.data.frame.list()。假设df是您的数据框架..。
as.data.frame.list(
with(df, setNames(long_name, types)),
stringsAsFactors = FALSE
)
# neighborhood sublocality postal_code
# 1 Upper East Side Manhattan 10021或者,同样的事情有点不同的方式.
as.data.frame(
with(df, setNames(as.list(long_name), types)),
stringsAsFactors = FALSE
)如果需要数字邮政编码,请在该列上运行as.numeric()。此外,由于您使用的是dplyr,所以您可以通过在tbl_df()中包装这个结果来获得您的确切愿望结果。或者你可以在dplyr中做所有的事情,比如
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数据:
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"))发布于 2016-04-23 02:13:29
我们可以使用transpose
library(data.table)
setNames(transpose(df[-1]), df$types)
# neighborhood sublocality postal_code
#1 Upper East Side Manhattan 10021https://stackoverflow.com/questions/36805724
复制相似问题