有没有办法在两个向量上使用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)
这似乎是一个相当人为的解决方案,但我无法弄清楚如何做到这一点.我遇到的问题是:
它需要创建dummyList即使dummyList永远不会改变,并且在调用之后是一个空列表mapply.
如果数字向量,,, c(1, 2)没有转换为列表,则调用的结果mapply是双精度命名向量.
为了解决问题2,我总是可以调用mapply两个向量然后调用as.list结果,但似乎应该有一种方法可以直接创建一个值在向量中的列表.
我正在寻找一种有效的方式进行以下转换:
输入示例:
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) 我有一个包含 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 来清理它......但似乎应该有一种更简单的方法来实现它!
我有一个看起来像这样的命名列表:
> 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)
有任何想法吗?
我有一个具有多种处理方式的数据集,这些数据集是通过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,:参数暗示行数不同:
我想要一种简单的方法将 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) 我有一个通过如下流程创建的列表(以便我可以从 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 ×7
list ×5
dataframe ×3
constructor ×1
converters ×1
data.table ×1
dplyr ×1
lapply ×1
named ×1