データフレームの行からベクトルを作成したい。ただし、行と列の名前は必要ありません。私はいくつかのことを試みました...しかし、運がありませんでした。
これは私のデータフレームです。
> 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
任意の助け、大歓迎。
データフレームから単一の行を抽出すると、1行のデータフレームが得られます。それを数値ベクトルに変換します。
as.numeric(df[1,])
@Rolandが示唆しているように、unlist(df[1,])
は名前を落とさずに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()