相关疑难解决方法(0)

如何制作一个很好的R可重复的例子

在与同事讨论性能,教学,发送错误报告或在邮件列表上搜索指导时,以及在Stack Overflow上,通常会询问可重复的示例并始终提供帮助.

您有什么建议创建优秀示例的提示?如何以文本格式粘贴中的数据结构?您还应该包含哪些其他信息?

在另外还有其他招数来使用dput(),dump()structure()?你什么时候应该包括library()require()声明?其中保留字应避免一个,此外c,df,data等?

怎样才能成为一位伟大的重复的例子?

r r-faq

2474
推荐指数
23
解决办法
28万
查看次数

同时合并列表中的多个data.frames

我有一个我要合并的许多data.frames的列表.这里的问题是每个data.frame在行数和列数方面都不同,但它们都共享关键变量(我已经调用过"var1","var2"在下面的代码中).如果data.frames在列方面是相同的,我只能rbind,plyr的rbind.fill可以完成这项工作,但这些数据并非如此.

因为该merge命令仅适用于2个data.frames,所以我转向Internet寻求创意.我从这里得到了这个,它在R 2.7.2中完美运行,这是我当时所拥有的:

merge.rec <- function(.list, ...){
    if(length(.list)==1) return(.list[[1]])
    Recall(c(list(merge(.list[[1]], .list[[2]], ...)), .list[-(1:2)]), ...)
}
Run Code Online (Sandbox Code Playgroud)

我会像这样调用函数:

df <- merge.rec(my.list, by.x = c("var1", "var2"), 
                by.y = c("var1", "var2"), all = T, suffixes=c("", ""))
Run Code Online (Sandbox Code Playgroud)

但是在2.7.2之后的任何R版本中,包括2.11和2.12,此代码失败并出现以下错误:

Error in match.names(clabs, names(xi)) : 
  names do not match previous names
Run Code Online (Sandbox Code Playgroud)

(很明显,我在其他地方看到了其他对此错误的引用而没有解决方案).

有什么方法可以解决这个问题吗?

merge r list dataframe r-faq

233
推荐指数
6
解决办法
15万
查看次数

按索引组合列表列表的元素

请考虑以下列表列表:

lst = list(list(c(1,2), c(3,4)),list(c(5,6), c(7,8)),list(c(9,10), c(11,12)))
Run Code Online (Sandbox Code Playgroud)

该列表lst包含三个列表,每个列表包含两个向量作为元素.我想通过索引组合底层列表的元素.换句话说,我想将列表1中的向量1与列表2和列表3的向量1合并,并将列表1中的向量2与列表2和列表3的向量2等合并...

这是我希望实现的结果:

res = list(c(1,2,5,6,9,10), c(3,4,7,8,11,12))
Run Code Online (Sandbox Code Playgroud)

我知道如果有两个单独的列表,可以按如下方式实现:

mapply(c, lst1, lst2)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何使用列表列表复制相同的逻辑.

有效的方法来实现吗?请记住,实际上,lst是一个包含5000个列表的列表,每个基础列表都包含大量向量.

谢谢!

r list

13
推荐指数
2
解决办法
5462
查看次数

合并数据帧列表中的数据帧

我有一个数据框列表,如下所示:

ls[[1]]
[[1]]

 month year   oracle
    1 2004 356.0000
    2 2004 390.0000
    3 2004 394.4286
    4 2004 391.8571 
 ls[[2]]
 [[2]]
 month year microsoft
    1 2004  339.0000
    2 2004  357.7143
    3 2004  347.1429
    4 2004  333.2857
Run Code Online (Sandbox Code Playgroud)

如何创建如下所示的单个数据框:

 month year   oracle   microsoft
    1 2004 356.0000    339.0000
    2 2004 390.0000    357.7143
    3 2004 394.4286    347.1429
    4 2004 391.8571    333.2857
Run Code Online (Sandbox Code Playgroud)

r dataframe

5
推荐指数
2
解决办法
1492
查看次数

从map()调用连接data.frames列表

是否有一种"tidyverse"方式来加入data.frames列表(一个la full_join(),但是对于> 2个data.frames)?作为调用的结果,我有一个data.frames列表map().我以前曾经Reduce()做过类似的事情,但是想把它们合并为管道的一部分 - 只是没有找到一种优雅的方法来做到这一点.玩具示例:

library(tidyverse)

## Function to make a data.frame with an ID column and a random variable column with mean = df_mean
make.df <- function(df_mean){
  data.frame(id = 1:50,
             x = rnorm(n = 50, mean = df_mean))
}

## What I'd love:
my.dfs <- map(c(5, 10, 15), make.df) #%>%
  # <<some magical function that will full_join() on a list of data frames?>>

## Gives me the result I want, but inelegant
my.dfs.joined <- …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr tidyverse

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

标签 统计

r ×5

dataframe ×2

list ×2

r-faq ×2

dplyr ×1

merge ×1

purrr ×1

tidyverse ×1