Ste*_*n F 45 r vector coercion dataframe
我需要将多行两列data.frame
转换为命名字符向量.我data.frame
会是这样的:
dd = data.frame(crit = c("a","b","c","d"),
name = c("Alpha", "Beta", "Caesar", "Doris")
)
Run Code Online (Sandbox Code Playgroud)
我真正需要的是:
whatiwant = c("a" = "Alpha",
"b" = "Beta",
"c" = "Caesar",
"d" = "Doris")
Run Code Online (Sandbox Code Playgroud)
Rol*_*and 63
使用names
功能:
whatyouwant <- as.character(dd$name)
names(whatyouwant) <- dd$crit
Run Code Online (Sandbox Code Playgroud)
as.character
是必要的,因为data.frame
并read.table
使用默认设置将字符转换为因子.
如果你想要一个单行:
whatyouwant <- setNames(as.character(dd$name), dd$crit)
Run Code Online (Sandbox Code Playgroud)
ale*_*han 22
您可以从中创建矢量dd$name
,并使用添加名称names()
,但您可以通过以下步骤一步完成所有操作structure()
:
whatiwant <- structure(as.character(dd$name), names = as.character(dd$crit))
Run Code Online (Sandbox Code Playgroud)
Joh*_*ler 10
您也可以deframe(x)
从tibble软件包中使用它。
tibble::deframe()
Run Code Online (Sandbox Code Playgroud)
它将第一列转换为名称,第二列转换为值。
这是一个非常通用、简单、整洁的方法:
library(dplyr)
iris %>%
pull(Sepal.Length, Species)
Run Code Online (Sandbox Code Playgroud)
第一个参数是值,第二个参数是名称。
对于多样性,尝试split
和unlist
:
unlist(split(as.character(dd$name), dd$crit))
# a b c d
# "Alpha" "Beta" "Caesar" "Doris"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13110 次 |
最近记录: |