将键值数据框转换为列表
Convert a key value data frame to a list
这是我的结构类型。数据框中有几千行,其结构类似于以下内容:
vct_names <- c("apples", "apples", "grapes", "apples", "grapes")
vct_codes <- c(23, 35, 123, 43, 156)
df_values <- data.frame(names = vct_names, codes = vct_codes)
我想将上面的数据框转换成命名列表。我想遍历上面数据框的每一行并将此数据框转换为列表。该列表将具有以下结构:
lst_values <- list()
lst_values$apples <- c(23, 35, 43)
lst_values$grapes <- c(123, 156)
关于解决此问题的优雅方法的任何想法。
lapply(split(df_values, df_values$names), function(z) z[,2])
$apples
[1] 23 35 43
$grapes
[1] 123 156
split
-函数正是为此而设计的。作为第一个参数,它适用于数据帧和向量。它通过作为通用函数来执行此多态行为。
> methods(split)
[1] split.data.frame split.data.table* split.Date split.default
[5] split.IDate* split.POSIXct split.zoo*
see '?methods' for accessing help and source code
这样会更经济:
> lst_values <- split(vct_codes, vct_names)
> lst_values
$apples
[1] 23 35 43
$grapes
[1] 123 156
在这种情况下,我们使用 split.default
。有时打印出代码是有用的,但在这种情况下,我们只看到在数据和参数传递给 .Internal(split(seq_along(x), f))
.
之前对边缘情况的一些初步操作
这是我的结构类型。数据框中有几千行,其结构类似于以下内容:
vct_names <- c("apples", "apples", "grapes", "apples", "grapes")
vct_codes <- c(23, 35, 123, 43, 156)
df_values <- data.frame(names = vct_names, codes = vct_codes)
我想将上面的数据框转换成命名列表。我想遍历上面数据框的每一行并将此数据框转换为列表。该列表将具有以下结构:
lst_values <- list()
lst_values$apples <- c(23, 35, 43)
lst_values$grapes <- c(123, 156)
关于解决此问题的优雅方法的任何想法。
lapply(split(df_values, df_values$names), function(z) z[,2])
$apples
[1] 23 35 43
$grapes
[1] 123 156
split
-函数正是为此而设计的。作为第一个参数,它适用于数据帧和向量。它通过作为通用函数来执行此多态行为。
> methods(split)
[1] split.data.frame split.data.table* split.Date split.default
[5] split.IDate* split.POSIXct split.zoo*
see '?methods' for accessing help and source code
这样会更经济:
> lst_values <- split(vct_codes, vct_names)
> lst_values
$apples
[1] 23 35 43
$grapes
[1] 123 156
在这种情况下,我们使用 split.default
。有时打印出代码是有用的,但在这种情况下,我们只看到在数据和参数传递给 .Internal(split(seq_along(x), f))
.