gpt4 book ai didi

r - 如何使用 tidyr::gather 将字符串保留在第一列中?

转载 作者:行者123 更新时间:2023-12-02 01:33:46 25 4
gpt4 key购买 nike

这可能是关于 tidyr 的一个非常基本的问题,我刚刚开始学习它,但在 SO 和 Google 中进行了大量搜索后似乎没有找到答案。

假设我有一个数据框:

mydf<- data.frame(name=c("Joe","Mary","Bob"),
jan=1:3,
feb=4:6,
mar=7:9,
apr=10:12)

我想把它从宽改成长。之前,我使用了melt,所以:

library(reshape)
melt(mydf,id.vars = "name",measure.vars = colnames(mydf)[-1])

产生

   name variable value
1 Joe jan 1
2 Mary jan 2
3 Bob jan 3
4 Joe feb 4
5 Mary feb 5
6 Bob feb 6
7 Joe mar 7
8 Mary mar 8
9 Bob mar 9
10 Joe apr 10
11 Mary apr 11
12 Bob apr 12

我想使用 tidyr::gather,所以我尝试了

gather(mydf,month,sales,jan:apr)

产生

   name month sales
1 2 jan 1
2 3 jan 2
3 1 jan 3
4 2 feb 4
5 3 feb 5
6 1 feb 6
7 2 mar 7
8 3 mar 8
9 1 mar 9
10 2 apr 10
11 3 apr 11
12 1 apr 12

我在这里迷路了,因为我无法将名称保留在第一列中。

我在这里错过了什么?

######### 编辑以添加#######

> R.Version()$version.string
[1] "R version 3.2.2 (2015-08-14)"
> packageVersion("tidyr")
[1] ‘0.3.0’

最佳答案

在 tidyr 0.3.0 中,您似乎需要将因子列 name 转换为字符。我不确定为什么它从 0.2.0 版本开始发生了变化,它在没有转换为字符的情况下工作。尽管如此,我们开始......

gather(transform(mydf, name = as.character(name)), month, sales, jan:apr)
# name month sales
# 1 Joe jan 1
# 2 Mary jan 2
# 3 Bob jan 3
# 4 Joe feb 4
# 5 Mary feb 5
# 6 Bob feb 6
# 7 Joe mar 7
# 8 Mary mar 8
# 9 Bob mar 9
# 10 Joe apr 10
# 11 Mary apr 11
# 12 Bob apr 12

R.version.string
# [1] "R version 3.2.2 (2015-08-14)"
packageVersion("tidyr")
# [1] ‘0.3.0’

感谢@aosmith 找到已关闭的 github 问题。您现在应该可以毫无问题地使用开发版本。要安装开发版本,请使用

devtools::install_github(
"hadley/tidyr",
ref = "2e08772d154babcc97912bcae8b0b64b65b964ab"
)

关于r - 如何使用 tidyr::gather 将字符串保留在第一列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32490653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com