R dataframe - 将多个列折叠为单个数字向量,逐行

时间:2016-09-02 19:10:59

标签: r

对不起,如果这是基本问题还是重复问题。但我一直在寻找好几个小时,但收效甚微。

我想在数据框中使用多个数字列(比如100),并将它们组合成一个我可以存储在单个列中的数字向量。我计划使用dplyr :: transmute()函数来存储结果并删除原始的100列。但是,这不是问题。我的问题是让操作迭代数据帧中的每一行。简单地说,想象一下我正在使用mtcars数据帧:

    as.numeric(mtcars[x,2:8])

会给我一个行x,第2列(cyl)到8(vs)的单个数字向量,然后我可以将它存储在一个新列中。但是如何将这个应用于数据帧的所有32行而不用32种方式输入,每行一次?

(是的,我已经尝试过"应用"功能,但我还在学习R,所以可能无法确定正确的语法)

(另外,我想我可以在for循环中做到这一点,但已经收集到这些在R中通常不受欢迎)

非常感谢任何帮助,请尽量保持温和!

2 个答案:

答案 0 :(得分:0)

您是否尝试过tidyr的gather()功能?以下是文档中的示例:

library(tidyr)

stocks <- data_frame(
  time = as.Date('2009-01-01') + 0:9,
  X = rnorm(10, 0, 1),
  Y = rnorm(10, 0, 2),
  Z = rnorm(10, 0, 4)
)

gather(stocks, stock, price, -time)
stocks %>% gather(stock, price, -time)

答案 1 :(得分:0)

我不认为davo1979正在寻求将他的数据转换为长格式,因此,我不认为tidyr :: gather是他想要的工具。

我认为答案最接近他的问题是

lapply(1:nrow(mtcars), function(x) as.numeric(mtcars[x,2:8]))

这会将每行存储为数字向量,包含在列表中。

然而,davo1979重要的是要知道这些数据的最终目标是什么。我问,因为你想要的一堆数字向量的结果是一种在R中处理和存储数据的笨拙方式。

相关问题