相关疑难解决方法(0)

从两个向量(名称,值)创建命名列表

有没有办法在两个向量上使用mapply来构造命名列表?第一个向量是类型character,包含用于列表的名称,而第二个包含值.

到目前为止,我唯一的解决方案是:

> dummyList = list()
> addToList <- function(name, value) {
+ dummyList[[name]] <- value
+ }
> mapply(addToList, c("foo", "bar"), as.list(c(1, 2))
$foo
`1`

$bar
`2`
Run Code Online (Sandbox Code Playgroud)

这似乎是一个相当人为的解决方案,但我无法弄清楚如何做到这一点.我遇到的问题是:

  1. 它需要创建dummyList即使dummyList永远不会改变,并且在调用之后是一个空列表mapply.

  2. 如果数字向量,,, c(1, 2)没有转换为列表,则调用的结果mapply是双精度命名向量.

为了解决问题2,我总是可以调用mapply两个向量然后调用as.list结果,但似乎应该有一种方法可以直接创建一个值在向量中的列表.

constructor r list named lapply

38
推荐指数
3
解决办法
3万
查看次数

将命名列表有效地转换为data.frame

我正在寻找一种有效的方式进行以下转换:

输入示例:

ob <- list(a = 2, b = 3)
Run Code Online (Sandbox Code Playgroud)

预期产量:

  key value
1   a     2
2   b     3
Run Code Online (Sandbox Code Playgroud)

当前(详细)解决方案:

data.frame(key = names(ob), value = unlist(ob, use.names = FALSE))
Run Code Online (Sandbox Code Playgroud)

r list dataframe

4
推荐指数
1
解决办法
69
查看次数

将具有不等长度元素的列表转换为两列数据框

我有一个包含 3 个元素的列表,每个元素都有不同的值集和数量。我想把这个列表变成一个简单的两列数据框。

第一列是列表元素的值,第二列是列表元素本身的名称。

myList <- list(A = c(1,2,3),
               B = c(10,20,30,40),
               C = c(100,200,300,400,500))
Run Code Online (Sandbox Code Playgroud)

所以理想的结果是这样的:

Value     List
1         A
2         A
10        B
100       C
......
Run Code Online (Sandbox Code Playgroud)

所以我知道我可以通过一系列 rbind 来做到这一点:

df <-   data.frame(Value = myList[[A]],cluster = A) %>%
  rbind(data.frame(Value = myList[[B]],cluster = B)) %>%
  rbind(data.frame(Value = myList[[C]],cluster = C))
Run Code Online (Sandbox Code Playgroud)

我可能可以用循环或 lapply 来清理它......但似乎应该有一种更简单的方法来实现它!

r list dataframe dplyr

4
推荐指数
1
解决办法
390
查看次数

data.frame的长度不等的字符向量列表

我有一个看起来像这样的命名列表:

> head(pathways)
$<NA>
NULL
$`2`
[1] "hsa04610"
$`9`
[1] "hsa00232" "hsa00983" "hsa01100"
$`10`
[1] "hsa00232" "hsa00983" "hsa01100"
$<NA>
NULL
$<NA>
NULL
Run Code Online (Sandbox Code Playgroud)

更多以前描述它.每个列表的名称是一个id号,作为列表元素的字符向量的每个元素的条目是另一个id号.我可以$<NA>轻松过滤掉条目is.na(),但后来我想改变其余部分,看起来像:

id   another_id
2    hsa04610   
9    hsa00232   
9    hsa00983   
9    hsa01100   
10   hsa00232  
10   hsa00983
10   hsa01100


> dput(test)
structure(list(`NA` = NULL, `2` = "hsa04610", `9` = c("hsa00232", 
"hsa00983", "hsa01100"), `10` = c("hsa00232", "hsa00983", "hsa01100"
), `NA` = NULL, `NA` = NULL), .Names = c(NA, "2", "9", "10", 
NA, NA))
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

r list dataframe

3
推荐指数
1
解决办法
1224
查看次数

如何将多个不同长度的列表合并到一个表中?

我有一个具有多种处理方式的数据集,这些数据集是通过read.csv导入到R中的。然后,我对数据进行了处理(以各种方式对其进行了归一化),现在有4个针对我的4种处理方式(listA,listB,listC,listD)的独立,标准化观察值列表。这些数据不是成对的,代表独立的观察结果(例如,a = 5和b = 6的样本量)。我想将这些列表组合成一个新的数据文件(可能是.csv或数据框),可以从中进行统计(ANOVA)和制图(箱形图)。最终数据集不应只是简单地将所有值附加到一个列表中的列表,而应根据其来自哪个列表将每个值列在一个列中。例如5.5 a 5 a 4.8 a 5.5 a 5.3 b 2.2 b 3.1等

我尝试追加,但是输出仅列出值,而不是值旁边的样本名称(a-d)。

my_list <- list(a= listA, b= listB, c= listC, d=listD)
my_list

Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

$a
 [1]  5.5 5 4.8  5.5  5.3  5.5  5.3
$b
 [1]  2.2 3.1 
Run Code Online (Sandbox Code Playgroud)

但我想看到有两列的表格

a 5.5
a 5
a 4.8
a 5.5
a 5.3
b 2.2
b 3.1
etc.
Run Code Online (Sandbox Code Playgroud)

尝试执行as.data.frame会产生以下错误:

my_df <-as.data.frame(my_list)错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,:参数暗示行数不同:

r

1
推荐指数
1
解决办法
98
查看次数

r data.frame 到命名列表

我想要一种简单的方法将 data.table 或 tibble 转换为命名列表。我猜它可能会因咕噜声、筑巢和分裂而倒下。这是一个闪亮的选项列表。

有类似的问题,但没有找到类似的问题。

d <- tidyr::tribble(
  ~key,  ~value,
  'a',        1,
  'b',        2,
  'c',        3
)

result <- list(a = 1, b = 2, c = 3)
Run Code Online (Sandbox Code Playgroud)

r list converters data.table

1
推荐指数
1
解决办法
1311
查看次数

R 将列表值转换为具有两列的数据框

我有一个通过如下流程创建的列表(以便我可以从 tidycensus 中提取):

dv_acs = c(
  hus          = "B25002_001", 
  husocc       = "B25002_002", 
  husvac       = "B17001_002"
)
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以将其转换为数据框。当我尝试通过以下方式要求它成为 data.frame 时:

out <- data.frame(dv_acs)
Run Code Online (Sandbox Code Playgroud)

然后我得到这个:

           dv_acs
hus    B25002_001
husocc B25002_002
husvac B17001_002
Run Code Online (Sandbox Code Playgroud)

其中左侧名称替换了通常的 1:n,但其本身并不是一列变量(数据被标记为 1 个变量的 3 个 obs)。

r

1
推荐指数
1
解决办法
700
查看次数

标签 统计

r ×7

list ×5

dataframe ×3

constructor ×1

converters ×1

data.table ×1

dplyr ×1

lapply ×1

named ×1