我想创建一个矢量出来的数据帧的一排。 但我不希望有行和列名。 我试过几件事情...但没有运气。
这是我的数据帧:
> 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
任何帮助,非常感谢。
当您从数据帧中提取单个行你会得到一个单行的数据帧。 将其转换为数字向量:
as.numeric(df[1,])
如@Roland暗示的, unlist(df[1,])
将所述一个行的数据帧转换为数值向量不删除名字。 因此unname(unlist(df[1,]))
是另一种,稍微更明确的方式来获得相同的结果。
我建议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
如果你不想更改为数字,你可以试试这个。
> as.vector(t(df)[,1])
[1] 1.0 2.0 2.6
需要注意的是,你必须要小心,如果你的行中包含的一个因素。 下面是一个例子:
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"
这里是一个dplyr
基于选项:
newV = df %>% slice(1) %>% unlist(use.names = FALSE)
# or slightly different:
newV = df %>% slice(1) %>% unlist() %>% unname()
数据帧的列向量已经,你只需要拉他们一把。 需要注意的是你把你的逗号之后,而不是之前它想要的列:
> newV <- df[,1]
> newV
[1] 1 2 4 2
如果你真的想一排,然后做什么本说,并请在今后正确使用的话。