#r #dataframe #dplyr #data.table #tidyverse
#r #фрейм данных #dplyr #данные.таблица #tidyverse
Вопрос:
У меня есть следующее data frame
, и я хочу сохранить значения первого столбца в качестве имен вложенных списков, а значения второго столбца — в качестве его элементов.
Ввод—
var <- c("a","b","c","d")
val <- c("0-1-2-NA","0-1","0-2-4","0-NA")
dt <- data.frame(var,val, stringsAsFactors = FALSE)
> dt
var val
1 a 0-1-2-NA
2 b 0-1
3 c 0-2-4
4 d 0-NA
Желаемый результат-
$a
[1] 0 1 2 NA
$b
[1] 0 1
$c
[1] 0 2 4
$d
[1] 0 NA
Примечание — я также хочу split
значения по -
перед созданием списка.
Комментарии:
1.
setNames(strsplit(dt$val, "-", TRUE), dt$var)
Ответ №1:
Базовое решение R с strsplit
.
dat <- strsplit(dt$val, split = "-")
names(dat) <- dt$var
dat
# $a
# [1] "0" "1" "2" "NA"
#
# $b
# [1] "0" "1"
#
# $c
# [1] "0" "2" "4"
#
# $d
# [1] "0" "NA"
Чтобы автоматически преобразовать строки, добавьте type.convert
(или as.integer
или as.numeric
):
res <- with(dt, lapply(strsplit(setNames(val, var), "-"), type.convert))
str(res)
# List of 4
# $ a: int [1:4] 0 1 2 NA
# $ b: int [1:2] 0 1
# $ c: int [1:3] 0 2 4
# $ d: int [1:2] 0 NA