R重塑形状并将值放入数组列中

R重塑形状并将值放入数组列中,r,R,这个问题很容易理解,但我做不到。我尝试过重塑和整理,但没有成功。 这是我拥有的数据帧: X X.1 close high low open ticker vol A3TV 2005-07-08 10.67 10.67 10.46 10.57 A3TV 2248201 A3TV 2005-07-11 10.53 10.73 10.50 10.67 A3TV 1372371 GOOG 2005-07-08 10.47 10.59

这个问题很容易理解,但我做不到。我尝试过重塑和整理,但没有成功。 这是我拥有的数据帧:

       X        X.1 close  high   low  open ticker     vol
   A3TV 2005-07-08 10.67 10.67 10.46 10.57   A3TV 2248201
   A3TV 2005-07-11 10.53 10.73 10.50 10.67   A3TV 1372371
   GOOG 2005-07-08 10.47 10.59 10.37 10.59   GOOG 1135093
   GOOG 2005-07-11 10.41 10.59 10.36 10.48   GOOG 722398
我试图得到这个结果:

       X.1    A3TV                                        GOOG
   2005-07-08 [10.67, 10.67, 10.46, 10.57, A3TV, 2248201]      [10.47, 10.59, 10.37, 10.59, GOOG, 1135093]
   2005-07-11 [10.53, 10.73, 10.50, 10.67, A3TV, 1372371]      [10.41, 10.59, 10.36, 10.48, GOOG, 722398]
所以,我想要的是按照X.1日期分组,并创建一列 包含我拥有的每个X代码的所有其他数据

我有一个使用data.table中的dcast的解决方案

这样做的目的是创建一个列,当你从长到宽时,你将使用它来填充:

> apply(df[,-c("X","X.1")],1,catcol)
[1] "10.67 10.67 10.46 10.57 A3TV 2248201" "10.53 10.73 10.50 10.67 A3TV 1372371"
[3] "10.47 10.59 10.37 10.59 GOOG 1135093" "10.41 10.59 10.36 10.48 GOOG  722398"
数据:

df <- read.table(text = "X        X.1 close  high   low  open ticker     vol
A3TV 2005-07-08 10.67 10.67 10.46 10.57   A3TV 2248201
A3TV 2005-07-11 10.53 10.73 10.50 10.67   A3TV 1372371
GOOG 2005-07-08 10.47 10.59 10.37 10.59   GOOG 1135093
GOOG 2005-07-11 10.41 10.59 10.36 10.48   GOOG 722398",header = T)
我有一个使用data.table中的dcast的解决方案

这样做的目的是创建一个列,当你从长到宽时,你将使用它来填充:

> apply(df[,-c("X","X.1")],1,catcol)
[1] "10.67 10.67 10.46 10.57 A3TV 2248201" "10.53 10.73 10.50 10.67 A3TV 1372371"
[3] "10.47 10.59 10.37 10.59 GOOG 1135093" "10.41 10.59 10.36 10.48 GOOG  722398"
数据:

df <- read.table(text = "X        X.1 close  high   low  open ticker     vol
A3TV 2005-07-08 10.67 10.67 10.46 10.57   A3TV 2248201
A3TV 2005-07-11 10.53 10.73 10.50 10.67   A3TV 1372371
GOOG 2005-07-08 10.47 10.59 10.37 10.59   GOOG 1135093
GOOG 2005-07-11 10.41 10.59 10.36 10.48   GOOG 722398",header = T)

这是一个整洁的解决方案

首先,我们将所需的变量组合成一列,然后扩展数据

# data read taken from @denis answer
df <- read.table(text = "X        X.1 close  high   low  open ticker     vol
A3TV 2005-07-08 10.67 10.67 10.46 10.57   A3TV 2248201
A3TV 2005-07-11 10.53 10.73 10.50 10.67   A3TV 1372371
GOOG 2005-07-08 10.47 10.59 10.37 10.59   GOOG 1135093
GOOG 2005-07-11 10.41 10.59 10.36 10.48   GOOG 722398",header = T)

library(tidyverse)

df2 <- df %>% 
  mutate(data = paste(close, high, low, open, ticker, vol, sep = " ")) %>% 
  select(X, X.1, data) %>% 
  pivot_wider(names_from = X, values_from = data)

这是一个整洁的解决方案

首先,我们将所需的变量组合成一列,然后扩展数据

# data read taken from @denis answer
df <- read.table(text = "X        X.1 close  high   low  open ticker     vol
A3TV 2005-07-08 10.67 10.67 10.46 10.57   A3TV 2248201
A3TV 2005-07-11 10.53 10.73 10.50 10.67   A3TV 1372371
GOOG 2005-07-08 10.47 10.59 10.37 10.59   GOOG 1135093
GOOG 2005-07-11 10.41 10.59 10.36 10.48   GOOG 722398",header = T)

library(tidyverse)

df2 <- df %>% 
  mutate(data = paste(close, high, low, open, ticker, vol, sep = " ")) %>% 
  select(X, X.1, data) %>% 
  pivot_wider(names_from = X, values_from = data)

请发布您的数据的可复制版本,这将使人们更容易帮助您。您可以使用dput来执行此操作。@LiefEsbenshade您可以在read中复制表格。tabletext=此处的表格,header=T当表格按照Manrique的方式复制时,这是他的数据的一个可复制版本。谢谢,我弄乱了readr::read_表格,并且变量解析不正确。作为一个元问题,上面的粘贴数据版本现在是共享示例的公认标准,而不是可以立即执行的标准吗?@LiefEsbenshade我当然希望它不会成为标准。粘贴打印输出不能确保其他用户以相同的数据类型读取列。例如,当我使用readr::read_table阅读时,我得到了2列,当我使用readr::read_table2阅读时,我得到了8列,包括X.1的日期和vol的数字,当我使用read.table阅读时,我得到了8列,其中X.1是一个因子。如果OP能更准确地表示这一点,那么您认为数组列是什么意思?看到你尝试过但没有成功的东西会很有帮助,这样我们就知道你想从哪里得到准确的信息。请发布你的数据的可复制版本,这将使人们更容易帮助你。您可以使用dput来执行此操作。@LiefEsbenshade您可以在read中复制表格。tabletext=此处的表格,header=T当表格按照Manrique的方式复制时,这是他的数据的一个可复制版本。谢谢,我弄乱了readr::read_表格,并且变量解析不正确。作为一个元问题,上面的粘贴数据版本现在是共享示例的公认标准,而不是可以立即执行的标准吗?@LiefEsbenshade我当然希望它不会成为标准。粘贴打印输出不能确保其他用户以相同的数据类型读取列。例如,当我使用readr::read_table阅读时,我得到了2列,当我使用readr::read_table2阅读时,我得到了8列,包括X.1的日期和vol的数字,当我使用read.table阅读时,我得到了8列,其中X.1是一个因子。如果OP能更准确地表示这一点,那么您认为数组列是什么意思?查看您尝试过但没有成功的内容会很有帮助,这样我们就知道您尝试获得正确的结果。另一个选项是将dcast中的fun.aggreagte参数设置为list:dcastdata=meltdf,id.vars=cX.1,ticker,formula=X.1~ ticker,value.var=value,fun.aggregate=list–但我不确定这是否是所需的输出。@markus这是我的第一个猜测,使用paste0x,collapse=作为聚合函数,但未能成功。list是一个很好的尝试,但outpu并不完全符合预期。另一个选项是将dcast中的fun.aggreagte参数设置为list:dcastdata=meltdf,id.vars=cX.1,ticker,formula=X.1~ticker,value.var=value,fun.aggregate=list–但我不确定这是否是预期的输出。@markus这是我第一次猜测,使用粘贴0x,collapse=作为聚合函数,但未能使其工作。列表是一个很好的尝试,但outpu并不完全是预期的,只是看到你之前发布,所以我删除了我的tidyr答案刚才看到你之前发布,所以我删除了我的tidyr答案