在数据帧中,[可以使用单个字符执行索引。例如mtcars["mpg"]。
另一方面,在矩阵上尝试相同的结果,NA例如
m = cbind(A = 1:5, B = 1:5)
m["A"]
# NA
Run Code Online (Sandbox Code Playgroud)
...暗示这在某种程度上是一种无效的矩阵子集方法。
这是正常的 R 行为吗?如果有,记录在哪里?
我在R中编写一个小函数,如下所示:
tags.out <- as.character(tags.out)
tags.out.unique <- unique(tags.out)
z <- NROW(tags.out.unique)
for (i in 1:10) {
l <- length(grep(tags.out.unique[i], x = tags.out))
tags.count <- append(x = tags.count, values = l) }
Run Code Online (Sandbox Code Playgroud)
基本上我想要获取唯一字符向量(tags.out.unique)的每个元素,并在unique函数之前计算它在向量中的出现次数.
这上面的代码段可以正常工作,但是,当我更换for (i in 1:10)用for (i in 1:z)或甚至一些数大于10(18000例如)我得到以下错误较大的:
Error in grep(tags.out.unique[i], x = tags.out) :
invalid regular expression 'c++', reason 'Invalid use of repetition operators
如果有人能够帮助我了解这里发生了什么,我将非常感激.
非常感谢.
有没有更好的方法来重塑数据帧数据?
temp <- bdh(conn,c("AUDUSD Curncy","EURUSD Curncy"),"PX_LAST","20110101")
给
head(temp)
ticker date PX_LAST
1 AUDUSD Curncy 2011-01-01 NA
2 AUDUSD Curncy 2011-01-02 NA
3 AUDUSD Curncy 2011-01-03 1.0205
4 AUDUSD Curncy 2011-01-04 1.0040
5 AUDUSD Curncy 2011-01-05 1.0014
6 AUDUSD Curncy 2011-01-06 0.9969
Run Code Online (Sandbox Code Playgroud)
和
tail(temp)
ticker date PX_LAST
2127 EURUSD Curncy 2013-11-26 1.3557
2128 EURUSD Curncy 2013-11-27 1.3570
2129 EURUSD Curncy 2013-11-28 1.3596
2130 EURUSD Curncy 2013-11-29 1.3591
2131 EURUSD Curncy 2013-11-30 NA
2132 EURUSD Curncy 2013-12-01 NA
Run Code Online (Sandbox Code Playgroud)
换句话说,数据只是垂直地相互固定,为了使它们工作,需要进一步处理.如何将这些数据重新组合成各种代码,即
head(temp)
AUDUSD.Curncy EURUSD.Curncy …Run Code Online (Sandbox Code Playgroud) 我们真的需要添加J()以选择数字列吗?
我们可以不用得到字符列的结果J().
library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)
DT["a"]
# x y v
# 1: a 1 1
# 2: a 3 2
# 3: a 6 3
setkey(DT,y)
DT["1"]
# Error in `[.data.table`(DT, "1") :
# typeof x.y (double) != typeof i.y (character)
# Is it a bug?
DT[J(1)]
# y x v
# 1: 1 a 1
# 2: 1 b 4
# 3: 1 c 7
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个大型数据集,看起来像这样:
str(ldt)
data.frame': 116105 obs. of 11 variables:
$ s : Factor w/ 35 levels "1","10","11",..: 1 1 1 1 1 1 1 1 1 1 ...
$ PM : Factor w/ 3 levels "C","F","NF": 3 3 3 3 3 3 3 3 3 3 ...
$ day : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
$ block : Factor w/ 3 levels "1","2","3": 2 2 2 2 2 2 2 …Run Code Online (Sandbox Code Playgroud) 我有一个向量:
c(5,3,2,6,7,8,1)
Run Code Online (Sandbox Code Playgroud)
我想计算累积最小值:
c(5,3,2,2,2,2,1)
Run Code Online (Sandbox Code Playgroud)
知道如何实现这一目标吗?
我在R里有一个data.table
date a b c d e f
2008 1 5 3 6 9 8
2008 3 6 2 1 5 8
2008 2 8 3 4 3 0
2009 5 5 3 6 9 8
2009 3 3 2 2 5 5
2010 2 8 3 7 7 0
Run Code Online (Sandbox Code Playgroud)
现在我想将给定的表转换为新的布局.B列应从第二行开始,第三行第c列,第四行第d列,......其余值应填满"0".并且不应增加表的长度:
date a b c d e f
2008 1 0 0 0 0 0
2008 3 5 0 0 0 0
2008 2 6 3 0 0 0
2009 …Run Code Online (Sandbox Code Playgroud) 如何在data.table中随机采样例如三组,以使结果包含三组,其中原始data.table中的所有行均如此?
library(data.table)
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C", "D", "E", "F"), 20,
replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
我知道如何从data.table中随机选择10行:
dat.sampl1 <- as.data.table(sapply(dat[], sample, 10))
Run Code Online (Sandbox Code Playgroud)
还有如何按组抽样
dat[,.SD[sample(.N, min(.N,3))], by = groups]
Run Code Online (Sandbox Code Playgroud)
但是如何随机分组?因此结果应如下所示:
ids groups
1 F
11 F
3 F
18 F
8 A
9 A
10 A
17 A
19 A
12 E
14 E
16 E
Run Code Online (Sandbox Code Playgroud) 我希望能够获得任何 R 对象的字符串表示形式(而不是打印)。在Python中,我会得到这样的东西
>>> class Foo():
... pass
...
>>> f = Foo()
>>> print(f)
<__main__.Foo object at 0x10dab0910>
>>> x=str(f)
>>> x
'<__main__.Foo object at 0x10dab0910>'
>>> a = {1, 2,3 }
>>> str(a)
'{1, 2, 3}'
>>> str(str)
"<class 'str'>"
>>> str(foo)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>>
KeyboardInterrupt
>>> def foo(): pass
...
>>> str(foo)
'<function foo at 0x10dab1170>'
Run Code Online (Sandbox Code Playgroud)
在 R 中,我尝试了以下操作(以斜体 …
有2个数据集
s=structure(list(var1 = c("a", "f", "k", "tt", "ee"), var2 = c("b",
"g", "l", "qq", "rr"), var3 = c("c", "h", "m", "ff", "cc"), var4 = c("d",
"i", "n", "gg", "vv"), var5 = c("e", "j", "o", "aa", "xx"), metric_var = c(100L,
200L, 300L, 567L, 789L)), class = "data.frame", row.names = c(NA,
-5L))
Run Code Online (Sandbox Code Playgroud)
和
medagger=structure(list(var1 = c("a", "z", "w", "f", "k"), var2 = c("b",
"u", "e", "g", "l"), var3 = c("c", "p", "r", "h", "m"), var4 = c("d",
"q", "q", "i", "n"), var5 …Run Code Online (Sandbox Code Playgroud)