【问题标题】:subset variables in a dataset independently using dplyr使用 dplyr 独立地在数据集中的子集变量
【发布时间】:2014-11-26 18:48:13
【问题描述】:

我想使用 dplyr 复制以下内容。

set.seed(123)
my_data <- data.frame( time = c(4:13, 4:13),
                       var1 = rep(c("a", "b"), each=10), 
                       var2 = rnorm(20))

my_data_new <- with(my_data,
                      data.frame ( time = time[var1 =="a"], 
                                  var2a = var2[var1 == "a"], 
                                  var2b = var2[var1 == "b"]))

我用 transmute() 尝试过类似的语法并得到以下错误消息

Error: wrong result size (10), expected 20 or 1

谢谢!

【问题讨论】:

  • 您可以使用do,但它不是很优雅,即。 my_data %&gt;% do(data.frame( time=.$time[.$var1=='a'], var2a=.$var2[.$var1=='a'], var2b=.$var2[.$var1=='b']))
  • 看来你真的用错了工具。你真的在重塑你的数据。因此melt()/cast() 来自reshape2gather()/spread() 来自tidyr 会更合适。

标签: r subset dplyr


【解决方案1】:

试试

library(tidyr)
res <- spread(my_data, var1, var2)
colnames(res) <- colnames(my_data_new)
identical(res, my_data_new)
#[1] TRUE

或者您可以使用dplyr 中的rename 更改列名(如@Richard Scriven 建议的那样)

library(dplyr)
library(tidyr)
spread(my_data, var1, var2)%>%
                        rename(var2a=a, var2b=b)

【讨论】:

  • 你可能真的是dplyr-y,在spread之后做%&gt;% rename(var2a = a, var2b = b)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
相关资源
最近更新 更多