我有一个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.
我有不规则的时间序列数据表示用户的某种类型的交易.每行数据都带有时间戳,表示当时的事务.根据数据的不规则性,一些用户一天可能有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) 我有关于按某种顺序发生的一组事件的数据.我想要一个枚举该事件集的列:这行是第一次,这行是第二次等.数据将如下所示:
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方式来做到这一点.
我在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 …
dplyr ×3
r ×3
lubridate ×1
macos ×1
numpy ×1
plyr ×1
python-3.x ×1
sublimetext ×1
sublimetext3 ×1
time-series ×1