如何将两个向量组合成一个数据框

nev*_*int 23 r dataframe

我有两个这样的矢量

 x <-c(1,2,3)
 y <-c(100,200,300)
 x_name <- "cond"
 y_name <- "rating"
Run Code Online (Sandbox Code Playgroud)

我想像这样输出数据帧:

> print(df)
      cond rating
      1  x 1 
      2  x 2
      3  x 3
      4  y 100
      5  y 200
      6  y 300
Run Code Online (Sandbox Code Playgroud)

这样做的方法是什么?

Gx1*_*TDa 57

虽然这不能回答问题,但它回答了许多人的相关问题:

x <-c(1,2,3)
y <-c(100,200,300)
x_name <- "cond"
y_name <- "rating"

df <- data.frame(x,y)
names(df) <- c(x_name,y_name)
print(df)

  cond rating
1    1    100
2    2    200
3    3    300
Run Code Online (Sandbox Code Playgroud)

  • 您的输出与问题的预期不同。我不明白 (2认同)

red*_*ode 12

x <-c(1,2,3)
y <-c(100,200,300)
x_name <- "cond"
y_name <- "rating"

require(reshape2)
df <- melt(data.frame(x,y))
colnames(df) <- c(x_name, y_name)
print(df)
Run Code Online (Sandbox Code Playgroud)

更新(2017-02-07): 作为@cdaringe评论的答案 - 有多种解决方案可能,其中一种方法如下.

library(dplyr)
library(magrittr)

x <- c(1, 2, 3)
y <- c(100, 200, 300)
z <- c(1, 2, 3, 4, 5)
x_name <- "cond"
y_name <- "rating"

# Helper function to create data.frame for the chunk of the data
prepare <- function(name, value, xname = x_name, yname = y_name) {
  data_frame(rep(name, length(value)), value) %>%
    set_colnames(c(xname, yname))
}

bind_rows(
  prepare("x", x),
  prepare("y", y),
  prepare("z", z)
)
Run Code Online (Sandbox Code Playgroud)


top*_*ito 9

这应该可以解决问题,只使用基数R生成您要求的数据框:

df <- data.frame(cond=c(rep("x", times=length(x)), 
                        rep("y", times=length(y))), 
                 rating=c(x, y))

df
  cond rating
1    x      1
2    x      2
3    x      3
4    y    100
5    y    200
6    y    300
Run Code Online (Sandbox Code Playgroud)

但是,从您最初的描述中,我会说这可能是一个更有可能的用例:

df2 <- data.frame(x, y)
colnames(df2) <- c(x_name, y_name)

df2
  cond rating
1    1    100
2    2    200
3    3    300
Run Code Online (Sandbox Code Playgroud)

[编辑:示例1中的移动括号]


fhe*_*anb 9

您可以使用expand.grid()函数.

x <-c(1,2,3)
y <-c(100,200,300)
expand.grid(cond=x,rating=y)
Run Code Online (Sandbox Code Playgroud)