Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:将列表中的元素拆分为子列表_R_List - Fatal编程技术网

R:将列表中的元素拆分为子列表

R:将列表中的元素拆分为子列表,r,list,R,List,我有一个具有以下结构的数据框: pat <- c(rep(1,50), rep(2,50), rep(3,50)) inc <- rep(c(rep(1,5), rep(2,5), rep(3,5), rep(4,5), rep(5,5), rep(6,5), rep(7,5), rep(8,5), rep(9,5), rep(10,5)), 3) df <- data.frame(cbind(pat, inc)) 现在我想把这个列表中的每个元素分割

我有一个具有以下结构的数据框:

pat <- c(rep(1,50), rep(2,50), rep(3,50))
inc <- rep(c(rep(1,5), rep(2,5), rep(3,5), rep(4,5), rep(5,5),
             rep(6,5), rep(7,5), rep(8,5), rep(9,5), rep(10,5)), 3)
df <- data.frame(cbind(pat, inc))
现在我想把这个列表中的每个元素分割成子列表。比如:

all.pat = split(all.inc, pat)
显然,这不起作用。我已经尝试了
plyr
函数和
lappy
,但没有成功


有什么想法吗?

使用
lappy

lapply(all.inc, function(x) split(x, x$pat))

如果您想同时拆分所有数据帧,可以使用

split(df, interaction(df$pat,df$inc))

但是,返回的值将是数据帧的单个列表,这与通过拆分列表元素得到的结果略有不同。

使用
交互
列表
拆分(df,list(df$…)
here?实际上我比OP更喜欢这个,因为我发现处理嵌套列表有时会很麻烦。+1@mrdwab,显然没有区别(除非
idential
对我撒谎).
split。默认
调用
f
上的
interaction
,如果
f
是一个列表,那么我想我应该删掉这一步。如果OP在第一次拆分后执行计算,然后再次拆分,那么我的解决方案就没有帮助了。@RomanLuštrik,我检查了,但它没有。它还创建了一个单独的列表(在本例中)30个数据帧。我只是想知道是否一种方法比另一种方法更值得推荐——我一直使用
list
方法。(我删除了我的评论,因为我意识到它是错误的-我在想
tapply
-ish。今天我在回答一个问题后找到了这个答案。这非常有帮助。谢谢你分享这个。+1:)好的,它起作用了。因此,我得到了一个与all.inc.长度相同(10)的列表。但我希望每个元素都包含在,例如,all.pat[1] 作为单个列表元素。all.pat[1]的长度为1,但它的长度应为3。在这种情况下,整个列表的长度应为30。希望,这很清楚?!@Markus,这是因为列表是嵌套的。为子列表编制索引需要:
length(all.pat[[1]])
。好的,没问题。只找到了“unlist”函数。使用recursive=F选项,它将提供所需的结果。非常感谢!@Markus,如果是这样的话,请注意Ben Barnes的解决方案直接将您带到了那里(尽管
data.frame
s的顺序不同)。我需要两个列表(all.pat和all.inc)为了进一步处理。所以我想我会使用您的解决方案。但是您实际想要实现什么呢?
dplyr::group_by
允许您通过一个或多个变量进行任意拆分,然后将其导入到任意一组
mutate
和/或
summary
,然后
%>%ungroup
split(df, interaction(df$pat,df$inc))