- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 5 个矩阵的列表,每个矩阵的大小不同,我想使用行名称合并所有矩阵。
这是我的列表的可重现示例(我在 R 版本 3.0.1 上使用 igraph_0.6.5-2):
x <- list(
as.matrix(c(1,4)),
as.matrix(c(3,19,11)),
as.matrix(c(3,9,8,5)),
as.matrix(c(3,10,8,87,38,92)),
as.matrix(c(87,8,8,87,38,92))
)
colnames(x[[1]]) <- c("P1")
colnames(x[[2]]) <- c("P2")
colnames(x[[3]]) <- c("P3")
colnames(x[[4]]) <- c("P4")
colnames(x[[5]]) <- c("P5")
rownames(x[[1]]) <- c("A","B")
rownames(x[[2]]) <- c("B","C","D")
rownames(x[[3]]) <- c("A","B", "E", "F")
rownames(x[[4]]) <- c("A","F","G","H","I","J" )
rownames(x[[5]]) <- c("B", "H","I","J", "K","L")
> x
[[1]]
P1
A 1
B 4
[[2]]
P2
B 3
C 19
D 11
[[3]]
P3
A 3
B 9
E 8
F 5
[[4]]
P4
A 3
F 10
G 8
H 87
I 38
J 92
[[5]]
P5
B 87
H 8
I 8
J 87
K 38
L 92
> P1 P2 P3 P4 P5
A 1 na 3 3 na
B 4 3 9 na 87
C na 19 na na na
D na 11 na na na
E na na 8 na na
F na na 5 10 na
G na na na 8 na
H na na na 87 na
I na na na 38 8
J na na na 92 87
K na na na na 38
L na na na na 92
do.call
合并它们功能:
y <- do.call(merge,c(x, by="row.names",all=TRUE))
Error in fix.by(by.x, x) : 'by' must match numbers of columns
最佳答案
我会创建一个辅助函数来移动您的 row.names()
到 data.frame
中的一列,并使用 Reduce()
至 merge()
所有的data.frame
s 在您的 list
:
rownames2col <- function(inDF, RowName = ".rownames") {
temp <- data.frame(rownames(inDF), inDF, row.names = NULL)
names(temp)[1] <- RowName
temp
}
Reduce(function(x, y) merge(x, y, by = ".rownames", all = TRUE),
lapply(x, rownames2col))
# .rownames P1 P2 P3 P4 P5
# 1 A 1 NA 3 3 NA
# 2 B 4 3 9 NA 87
# 3 C NA 19 NA NA NA
# 4 D NA 11 NA NA NA
# 5 E NA NA 8 NA NA
# 6 F NA NA 5 10 NA
# 7 G NA NA NA 8 NA
# 8 H NA NA NA 87 8
# 9 I NA NA NA 38 8
# 10 J NA NA NA 92 87
# 11 K NA NA NA NA 38
# 12 L NA NA NA NA 92
rownames()
的步骤的原因in as a column 是通过
row.names
合并的创建一个名为
Row.names
的列在第一
merge()
在
Reduce()
,从而不允许后续
list()
方便合并的项目。
> Reduce(function(x, y) merge(x, y, by = "row.names", all = TRUE), x[1:2])
Row.names P1 P2
1 A 1 NA
2 B 4 3
3 C NA 19
4 D NA 11
data.table
方法
data.table
通过设置
keep.rownames
参数为“
TRUE
”并设置
key
到结果“
rn
”列。
library(data.table)
Reduce(function(x, y) merge(x, y, all = TRUE),
lapply(x, function(y) data.table(y, keep.rownames=TRUE, key = "rn")))
# rn P1 P2 P3 P4 P5
# 1: A 1 NA 3 3 NA
# 2: B 4 3 9 NA 87
# 3: C NA 19 NA NA NA
# 4: D NA 11 NA NA NA
# 5: E NA NA 8 NA NA
# 6: F NA NA 5 10 NA
# 7: G NA NA NA 8 NA
# 8: H NA NA NA 87 8
# 9: I NA NA NA 38 8
# 10: J NA NA NA 92 87
# 11: K NA NA NA NA 38
# 12: L NA NA NA NA 92
for
辅助。环形。这实际上可能比上述更快,因为
merge
与基本子集化相比,速度相当慢。速度方面的另一个优势是生成的对象是
matrix
和许多
matrix
操作比
data.frame
快操作。
## Identify the unique "rownames" for all list items
Rows <- unique(unlist(lapply(x, rownames)))
## Create a matrix of NA values
## with appropriate dimensions and dimnames
myMat <- matrix(NA, nrow = length(Rows), ncol = length(x),
dimnames = list(Rows, sapply(x, colnames)))
## Use your `for` loop to fill it in
## with the appropriate values from your list
for (i in seq_along(x)) {
myMat[rownames(x[[i]]), i] <- x[[i]]
}
myMat
# P1 P2 P3 P4 P5
# A 1 NA 3 3 NA
# B 4 3 9 NA 87
# C NA 19 NA NA NA
# D NA 11 NA NA NA
# E NA NA 8 NA NA
# F NA NA 5 10 NA
# G NA NA NA 8 NA
# H NA NA NA 87 8
# I NA NA NA 38 8
# J NA NA NA 92 87
# K NA NA NA NA 38
# L NA NA NA NA 92
关于r - 使用 R 中的行名称合并列表的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17999920/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!