cbind(1:2, 1:10)
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 1 3
[4,] 2 4
[5,] 1 5
[6,] 2 6
[7,] 1 7
[8,] 2 8
[9,] 1 9
[10,] 2 10
Run Code Online (Sandbox Code Playgroud)
我想要一个像下面这样的输出
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
[7,] 7
[8,] 8
[9,] 9
[10,] 10
Run Code Online (Sandbox Code Playgroud) 我想我正在寻找rbind.fill(在Hadley的plyr包装中)的类比cbind.我看了,但没有cbind.fill.
我想做的是以下内容:
#set these just for this example
one_option <- TRUE
diff_option <- TRUE
return_df <- data.frame()
if (one_option) {
#do a bunch of calculations, produce a data.frame, for simplicity the following small_df
small_df <- data.frame(a=1, b=2)
return_df <- cbind(return_df,small_df)
}
if (diff_option) {
#do a bunch of calculations, produce a data.frame, for simplicity the following small2_df
small2_df <- data.frame(l="hi there", m=44)
return_df <- cbind(return_df,small2_df)
}
return_df
Run Code Online (Sandbox Code Playgroud)
可以理解,这会产生错误:
Error in data.frame(..., check.names …Run Code Online (Sandbox Code Playgroud) 我有几个长度不等的向量,我想要cbind他们.我把矢量放到一个列表中,我试图结合使用do.call(cbind, ...):
nm <- list(1:8, 3:8, 1:5)
do.call(cbind, nm)
# [,1] [,2] [,3]
# [1,] 1 3 1
# [2,] 2 4 2
# [3,] 3 5 3
# [4,] 4 6 4
# [5,] 5 7 5
# [6,] 6 8 1
# [7,] 7 3 2
# [8,] 8 4 3
# Warning message:
# In (function (..., deparse.level = 1) :
# number of rows of result is not a multiple of vector …Run Code Online (Sandbox Code Playgroud) 在简单的情况下,将偶数列表转换为数据框可以通过as.data.frame(). 例如 :
> (x1 <- list(a = 1:3, b = 4:6, c = 7:9))
> as.data.frame(x1)
# a b c
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9
Run Code Online (Sandbox Code Playgroud)
但是,如果列表中组件的长度不相等,则as.data.frame()不起作用。
> (x2 <- list(a = 1:4, b = 5:6, c = 7:11, d = 12:14))
# $a
# [1] 1 2 3 4
# $b
# [1] 5 6
# $c
# [1] 7 8 9 10 11
# …Run Code Online (Sandbox Code Playgroud) 这里我有一个不同长度向量的列表.我想要一个data.frame.我在SO中看过很多关于它的帖子(参见参考资料),但是没有一个像我预期的那样简单,因为这实际上是数据预处理中的常见任务.谢谢.
这里最简单的意思as.data.frame(aa)是它是否有效.所以R的基础包中的一个函数会很棒.sapply(aa, "length<-", max(lengths(aa)))实际上有四个功能.
一个例子如下所示.
输入:
aa <- list(A=c(1, 3, 4), B=c(3,5,7,7,8))
Run Code Online (Sandbox Code Playgroud)
输出:
A B
1 3
3 5
4 7
NA 7
NA 8
Run Code Online (Sandbox Code Playgroud)
A和B是data.frame的colnames.
答案是sapply(aa, '[', seq(max(sapply(aa, length)))),但它也很复杂.
参考:
这就是我的数据的样子:
structure(list(`Name1` = c("Mark",
NA, NA, NA, NA, NA), Name2 = c(NA, "Stefan",
"Clara", NA, NA, NA), `Name3` = c(NA, NA,
NA, "Max", "Pete", "Gabe"), `Name4` = c("Titan",
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), `Name5` = c(NA_character_, NA_character_,
NA_character_, NA_character_, "Tom", NA_character_),
Name6 = c(NA_character_, "Narq", NA_character_,
NA_character_, "Seba", NA_character_), Name7 = c(NA_character_,
NA_character_, "Greg", NA_character_, NA_character_,
NA_character_), Name8 = c(NA_character_,
NA_character_, NA_character_, "Terry", NA_character_,
NA_character_), Name9 = c(NA_character_,
NA_character_, NA_character_, NA_character_, "Coaty",
NA_character_), Name10 = c(NA_character_,
NA_character_, "Meg", NA_character_, …Run Code Online (Sandbox Code Playgroud) 我有以下清单
\nexample <- list(a = c(1, 2, 3),\n b = c(2, 3),\n c = c(3, 4, 5, 6))\nRun Code Online (Sandbox Code Playgroud)\n我想将其转换为以下小标题
\n# A tibble: 9 \xc3\x97 2\n name value\n <chr> <dbl>\n1 a 1\n2 a 2\n3 a 3\n4 b 2\n5 b 3\n6 c 3\n7 c 4\n8 c 5\n9 c 6\nRun Code Online (Sandbox Code Playgroud)\n我发现了有关此主题的多个 StackOverflow 问题,例如此处、此处或此处,但没有一个问题涉及向量名称不会成为列名称的特殊情况。
\n我设法通过如下所示的良好旧循环实现了预期的结果,但我正在寻找一种更快、更优雅的方法。
\nlibrary(dplyr)\n\nexample_list <- list(a = c(1, 2, 3),\n b = c(2, 3),\n c = c(3, 4, 5, 6))\n\nexample_tibble …Run Code Online (Sandbox Code Playgroud)