小编div*_*ero的帖子

data.frame的命名列表列表

我有一个JSON对象的以下表单的命名列表列表:

my_list = list(list(a = 10, b = "blah"), 
               list(a = 15, b = "stuff"))
Run Code Online (Sandbox Code Playgroud)

外部列表的每个元素都是一个命名列表,我想将它转换为以下形式的data.frame,列名完整:

a   b 
10  "blah" 
15  "stuff"
Run Code Online (Sandbox Code Playgroud)

从表面上看,我可以做到这一点to_df = data.frame(do.call(rbind, my_list)).

但是,如果我尝试使用单个列提取to_df$a或者to_df[,1]我将获得一个列表而不是像data.frame通常所期望的那样的向量:

> to_df[,1]
[[1]]
[1] 10

[[2]]
[1] 15
Run Code Online (Sandbox Code Playgroud)

代替:

> to_df[,1]
[1] 10 15
Run Code Online (Sandbox Code Playgroud)

R邮件列表上的一篇旧帖子提出了以下解决方案:to_df = as.data.frame(t(sapply(my_list, rbind))).但是,这不仅不会转移到列名称,它仍然具有在使用时查看单个列时返回列表而不是向量的相同问题to_df[,1].

实现这一目标的最佳方法是什么?有dplyr办法吗?

编辑:感谢所有解决方案,似乎诀窍是lapply将列表的每个元素转换为a data.frame然后使用dplyr或它们将它们绑定在一起do.call.或者,data.table大多数工作只需一次调用即可rbindlist.

r dplyr

11
推荐指数
3
解决办法
6671
查看次数

dplyr:使用滚动时间窗口对数据进行分组和汇总/变更

我有不规则的时间序列数据表示用户的某种类型的交易.每行数据都带有时间戳,表示当时的事务.根据数据的不规则性,一些用户一天可能有100行,而其他用户一天可能有0或1个事务.

数据可能如下所示:

data.frame(
  id = c(1, 1, 1, 1, 1, 2, 2, 3, 4),
  date = c("2015-01-01", 
           "2015-01-01", 
           "2015-01-05", 
           "2015-01-25",
           "2015-02-15",
           "2015-05-05", 
           "2015-01-01", 
           "2015-08-01", 
           "2015-01-01"),
  n_widgets = c(1,2,3,4,4,5,2,4,5)
)

   id       date n_widgets
1  1 2015-01-01         1
2  1 2015-01-01         2
3  1 2015-01-05         3
4  1 2015-01-25         4
5  1 2015-02-15         4
6  2 2015-05-05         5
7  2 2015-01-01         2
8  3 2015-08-01         4
9  4 2015-01-01         5
Run Code Online (Sandbox Code Playgroud)

我经常想知道一些关于用户的滚动统计数据.例如:对于某个特定日期的此用户,过去30天内发生的交易次数,前30天内售出的小部件数量等.

对应上面的例子,数据应如下所示:

   id     date    n_widgets  n_trans_30  total_widgets_30
1  1 2015-01-01         1           1 …
Run Code Online (Sandbox Code Playgroud)

r time-series lubridate dplyr

7
推荐指数
1
解决办法
1984
查看次数

创建列以枚举一组事件

我有关于按某种顺序发生的一组事件的数据.我想要一个枚举该事件集的列:这行是第一次,这行是第二次等.数据将如下所示:

S   Time
A     3
A     4
A     5
A     10
B     4
B     9
B     1
B     37
Run Code Online (Sandbox Code Playgroud)

其中S是某种会话ID,时间显然是时间.我希望添加以下结果列:

S   Time   Order
A     3      1
A     5      3
A     4      2
A     10     4
B     4      2
B     9      3
B     1      1
B     37     4
Run Code Online (Sandbox Code Playgroud)

对于每个会话ID,我希望有一个列,根据时间对行进行排序.我正在使用dplyr,我希望有一个简洁的dplyr方式来做到这一点.

r plyr dplyr

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

Sublime 3:使用Python3构建系统的奇怪输出

我在OS X上,我正试图让python3在sublime中工作.我通过自制软件安装了python3,并使用pip为python和python3安装了numpy.为了能够构建python3,我为sublime添加了以下构建文件:

{
    "path": "/usr/local/Cellar/python3/3.4.2_1/bin",
    "cmd": ["python3", "-u", "$file"],
    "env":{},
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}
Run Code Online (Sandbox Code Playgroud)

最后,我在以下测试文件中尝试构建系统:

#test.py
import numpy

def square(x):
    return x * x

if __name__ == '__main__':
    print("test: square(42) ==", square(42))
Run Code Online (Sandbox Code Playgroud)

如果我使用构建系统设置为python(使用OS X默认版本的python 2.7.8)构建它,那么当我构建sublime时,我得到以下(正确的)输出:

('test: square(42) ==', 1764)
[Finished in 0.1s]
Run Code Online (Sandbox Code Playgroud)

但是,如果我将构建系统设置为使用python3进行构建,那么当我构建sublime时,会得到以下奇怪的结果:

sh: sysctl: command not found
sh: grep: command not found
sh: sw_vers: command not found
sh: grep: command not found
test: square(42) == 1764
[Finished in 0.1s]
Run Code Online (Sandbox Code Playgroud)

我仍然得到正确的输出,但也得到一堆未找到的命令.更奇怪的是,如果我保存这个脚本并使用python test.pyfor python …

macos numpy python-3.x sublimetext sublimetext3

3
推荐指数
1
解决办法
3023
查看次数