我进行了几天的一系列测量。测量的数量通常为4。任何测量中可以捕获的数字范围为1-5(在现实生活中,给定测试集,该范围可以高达100或低至20)。
我想每天计算每个值在当天之前发生了多少次。
让我用一些示例数据进行解释:
# test data creation
d1 = list(as.Date("2013-5-4"), 4,2)
d2 = list(as.Date("2013-5-9"), 2,5)
d3 = list(as.Date("2013-5-16"), 3,2)
d4 = list(as.Date("2013-5-30"), 1,4)
d = rbind(d1,d2,d3,d4)
colnames(d) <- c("Date", "V1", "V2")
tt = as.data.table(d)
Run Code Online (Sandbox Code Playgroud)
我想运行一个函数,该函数将添加5列(在可能的值范围内,每个可能的值1个)。在每个列中,我都希望在测试日期之前计算该值的出现次数。
例如,2013-5-30的函数输出为C1=0, C2=3, C3=1, C4=1, C5=1。
它计数了多少次:
1出现在之前且不包括5/30,为零
。2出现在之前且不包括5/30,这是三个
。3出现在之前且不包括5/30,这是一个
等。
此外,它还应包括一列,显示该数字占总测量值的百分比。例如5/30,在5/30之前有6次测量,因此
pc1 =(0/6),pc2 = 3/6,pc3 = 1/6,pc4 = 1/6,pc5 = 1/6
我想使用data.table分配符号(:=)将所有这些多列添加到一张照片中。我正在寻找的输出格式如下:
Date V1 V2 C1 PC1 C2 PC2 C3 PC3 C4 PC4 C5 PC5
Run Code Online (Sandbox Code Playgroud) 我有一个包含100个变量和400,000个事务的大型数据集.这是一个示例数据:
a <- structure(list(ID = c("A1", "A2", "A3", "A1", "A1", "A2", "A4", "A5", "A2", "A3"),
Type = c("A", "B", "C", "A", "A", "A", "B", "B", "C", "B"),
Alc = c("E", "F", "G", "E", "E", "E", "F", "F", "F", "F"),
Com = c("Y", "N", "Y", "N", "Y", "Y", "Y", "N", "N", "Y")),
.Names = c("ID", "Type", "Alc", "Com"), row.names = c(NA, -10L), class = "data.frame")
a
ID Type Alc Com
1 A1 A E Y
2 A2 B F N
3 …Run Code Online (Sandbox Code Playgroud) 说我有如下数据
A <- c(1,1,1,2,2,2,3,3,3)
B <- c(1,0,0,1,0,0,1,0,0)
C <- c(8,7,6,8,7,8,9,9,11)
D <- data.frame(A,B,C)
D
library(dplyr)
E <- D %>%
group_by(B) %>%
filter(abs(diff(C)) <= 1)
Run Code Online (Sandbox Code Playgroud)
删除这些情况,以便删除黄色显示

换句话说,对于每个a身份,当我们评估b=0相对于b=1,c超过差异1的任何值.
对不起,我甚至没能完成这项任务的最基本部分.我有一个50长的字符串列表,我初始化一个空的向量25长,但即使手动将一个的第一个元素分配给另一个的第一个元素失败了:
> p$key
[1] CA TX NY FL IL PA OH MI GA NC NJ VA MA WA IN AZ TN MO MD WI MN CO AL SC LA KY OR
[28] OK CT IA MS AR KS UT NV NM WV NE ID ME NH HI RI MT DE SD AK ND VT WY
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME MI ... …Run Code Online (Sandbox Code Playgroud) 我想要做的是这样的事情:
DT[,diffs:=c(NA, diff(SPY_mid))]
Run Code Online (Sandbox Code Playgroud)
但在剧本中,事先不知道
DT[,diffs:=c(NA, diff(paste('SPY', '_mid', sep='')))]
Run Code Online (Sandbox Code Playgroud)
似乎不起作用.这也不是:
DT[,'diffs':=c(NA, diff(paste('SPY', '_mid', sep=''))), with=F]
Run Code Online (Sandbox Code Playgroud) 假设我有一个如下数据框:
df <- data.frame(v1 = sample(1:10, 100, replace = T), v2 = sample(LETTERS, 100, replace = T),
V3 = sample(letters, 100, replace = T), v4 = sample(1:15, 100, replace = T))
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的数据框df2只包含超过10个值的列.因此,在这个例子中它将是v2,v3和v4.我怎样才能做到这一点?在实践中,我的数据框有数千列.
我试过这个:
df2 <- df %>% select(which(length(unique(.))>10))
Run Code Online (Sandbox Code Playgroud) 我想在每个字符串中找到大写字母,并计算每个字符串的数量,例如
t = c("gctaggggggatggttactactGtgctatggactac", "gGaagggacggttactaCgTtatggactacT", "gcGaggggattggcttacG")
ldply(str_match_all(t,"[A-Z]"),length)
Run Code Online (Sandbox Code Playgroud)
当应用上述功能时,我的输出是
1 4 2
Run Code Online (Sandbox Code Playgroud)
但我的愿望输出是
[1] G -1
[2] G -1 C -1 T -2
[3] G -2
我有一个数据框,我想在符合条件的情况下将列的值替换为一定数量的行
示例数据帧
A B C
10 15 0
11 11 6
3 12 0
4 6 9
5 9 0
7 8 0
7 1 8
Run Code Online (Sandbox Code Playgroud)
如果C中任何行的值大于0,则接下来的5个C值需要替换为0,从而产生以下数据帧
A B C
10 15 0
11 11 6
3 12 0
4 6 0
5 9 0
7 8 0
7 1 0
Run Code Online (Sandbox Code Playgroud)
在R中没有循环的任何方法来实现这一点?
这里更好的意思是更快或更容易阅读/更短的语法,或者它也可能意味着命令甚至不可行data.table.
我不plyr经常使用,想知道我是否应该这样做.因为我不使用它了很多,唯一的例子,我能想出的rbind.fill是,据我所知没有一个data.table模拟和我见过未便每隔例如两个正在做plyr和data.table,后者是更快,更容易阅读/更紧凑.