转换的数据帧,以矢量的行(Convert a row of a data frame to vect

2019-07-18 14:53发布

我想创建一个矢量出来的数据帧的一排。 但我不希望有行和列名。 我试过几件事情...但没有运气。

这是我的数据帧:

> df <- data.frame(a=c(1,2,4,2),b=c(2,6,2,1),c=c(2.6,8.2,7.5,3))
> df
  a b   c
1 1 2 2.6
2 2 6 8.2
3 4 2 7.5
4 2 1 3.0

我试过了:

> newV <- as.vector(df[1,])
> newV
  a b   c
1 1 2 2.6

但我真的想要的东西看起来就像是:

> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6

任何帮助,非常感谢。

Answer 1:

当您从数据帧中提取单个行你会得到一个单行的数据帧。 将其转换为数字向量:

as.numeric(df[1,])

如@Roland暗示的, unlist(df[1,])将所述一个行的数据帧转换为数值向量不删除名字。 因此unname(unlist(df[1,]))是另一种,稍微更明确的方式来获得相同的结果。



Answer 2:

我建议unlist ,这使的名字。

unlist(df[1,])
  a   b   c 
1.0 2.0 2.6 

is.vector(unlist(df[1,]))
[1] TRUE

如果你不想要一个名为向量:

unname(unlist(df[1,]))
[1] 1.0 2.0 2.6


Answer 3:

如果你不想更改为数字,你可以试试这个。

> as.vector(t(df)[,1])
[1] 1.0 2.0 2.6


Answer 4:

需要注意的是,你必须要小心,如果你的行中包含的一个因素。 下面是一个例子:

df_1 = data.frame(V1 = factor(11:15),
                  V2 = 21:25)
df_1[1,] %>% as.numeric() # you expect 11 21 but it returns 
[1] 1 21

下面是另一个例子(默认data.frame()将字符转换为因子)

df_2 = data.frame(V1 = letters[1:5],
                  V2 = 1:5)
df_2[3,] %>% as.numeric() # you expect to obtain c 3 but it returns
[1] 3 3
df_2[3,] %>% as.character() # this won't work neither
[1] "3" "3"

为了防止这种行为,你需要照顾的因素,提取之前:

df_1$V1 = df_1$V1 %>% as.character() %>% as.numeric()
df_2$V1 = df_2$V1 %>% as.character()
df_1[1,] %>% as.numeric()
[1] 11  21
df_2[3,] %>% as.character()
[1] "c" "3"


Answer 5:

这里是一个dplyr基于选项:

newV = df %>% slice(1) %>% unlist(use.names = FALSE)

# or slightly different:
newV = df %>% slice(1) %>% unlist() %>% unname()


Answer 6:

数据帧的列向量已经,你只需要拉他们一把。 需要注意的是你把你的逗号之后,而不是之前它想要的列:

> newV <- df[,1]
> newV
[1] 1 2 4 2

如果你真的想一排,然后做什么本说,并请在今后正确使用的话。



文章来源: Convert a row of a data frame to vector