我不经常使用索引data.frame逐行名称,但有时候这样做有一个优势.但是,当我试图过滤出令人不快的行时,我注意到了意想不到的结果
test <- data.frame(a = c("a", "b", "c"),
b = c("A", "B", "C"),
row.names = c(-99.5, 99.5, 99))
test["-99", ]
Run Code Online (Sandbox Code Playgroud)
你会期望它会给你
a b
NA <NA> <NA>
Run Code Online (Sandbox Code Playgroud)
但它回来了
a b
-99.5 a A
Run Code Online (Sandbox Code Playgroud)
只是具体而言
Session info ---------------------------------------------------------------
setting value
version R version 3.2.1 (2015-06-18)
system x86_64, mingw32
ui RStudio (0.99.441)
language (EN)
collate English_United Kingdom.1252
tz Europe/London
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试使用ggvis中的ggplot2中的数字来复制热图.ggplot2版本是
library(ggplot2)
hec <- as.data.frame(xtabs(Freq ~ Hair + Eye, HairEyeColor))
ggplot(hec, aes(Hair, Eye)) +
geom_tile(aes(fill = Freq)) +
geom_text(aes(label = Freq),colour="white")
Run Code Online (Sandbox Code Playgroud)
它看起来像那样
我在ggvis中的版本是
hec%>%
ggvis(~Hair, ~Eye, fill=~Freq)%>%
layer_rects(width = band(), height = band()) %>%
layer_text(text:=~Freq,fontSize := 20, fill:="white",baseline:="top",align:="center") %>%
scale_nominal("x", padding = 0, points = FALSE) %>%
scale_nominal("y", padding = 0, points = FALSE)
Run Code Online (Sandbox Code Playgroud)
结果并不完美
我试图通过手动添加边距来修复数字对齐,但这种情况不可调整大小.
有任何想法吗?
我正在尝试通过data.table调用替换SQL生成的笛卡尔积.我拥有丰富的资产和价值历史,我需要所有组合的子集.假设我有一个表格,其中T = [date,contract,value].在SQL中它看起来像
SELECT a.date, a.contract, a.value, b.contract. b.value
FROM T a, T b
WHERE a.date = b.date AND a.contract <> b.contract AND a.value + b.value < 4
Run Code Online (Sandbox Code Playgroud)
在RI现在有以下内容
library(data.table)
n <- 1500
dt <- data.table(date = rep(seq(Sys.Date() - n+1, Sys.Date(), by = "1 day"), 3),
contract = c(rep("a", n), rep("b", n), rep("c", n)),
value = c(rep(1, n), rep(2, n), rep(3, n)))
setkey(dt, date)
dt[dt, allow.cartesian = TRUE][(contract != i.contract) & (value + i.value < 4)]
Run Code Online (Sandbox Code Playgroud)
我相信我的解决方案首先创建所有组合(在这种情况下为13,500行),然后过滤(到3000).然而SQL(我可能错了)加入子集,更重要的是不要将所有组合加载到RAM中.任何想法如何使用data.table更有效?
我正在使用flexdashboard创建报告,并且只想更改页面一部分的字体大小。
在我看来,可以通过添加CSS类来做到这一点,但是我找不到如何在R markdown代码中指定类名的方法。
有任何想法吗?
我正在使用dplyr对PostgreSQL中的大表进行操作.经过多次操作后,我有一个大的派生表,我想保存到一个新表.原始解决方案是将其加载到R存储器并写入数据库.这听起来很可怕,因为新表只是一个由dplyr生成的CREATE + SQL.有什么方法可以使用内置函数将CREATE或UPDATE应用于数据库dplyr对象?
我正在使用Rcpp和Windows上的并行计算进行R代码优化.我在parLapply中调用Rcpp函数时遇到问题.这个例子如下
Rcpp代码(test.cpp)
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector payoff( double strike, NumericVector data) {
return pmax(data - strike, 0);
}
Run Code Online (Sandbox Code Playgroud)
R代码
library(parallel)
library(Rcpp)
sourceCpp("test.cpp")
strike_list <- as.list(seq(10, 100, by = 5))
data <- runif(10000) * 50
# One core version
strike_payoff <- lapply(strike_list, payoff, data)
# Multiple cores version
numWorkers <- detectCores()
cl <- makeCluster(numWorkers, type = "PSOCK")
clusterExport(cl = cl,varlist = "payoff")
strike_payoff <- parLapply(cl, strike_list, payoff, data)
Run Code Online (Sandbox Code Playgroud)
并行版本出错
Error in checkForRemoteErrors(val) :
8 nodes produced errors; …
Run Code Online (Sandbox Code Playgroud) 我有一个非常有趣的问题,但我宁愿没有.我必须将一个数字舍入到一个结束的数字,所以我按照这里的解决方案 它曾经工作正常,直到我发现data.table的错误
library(data.table)
options(digits = 20) # to see number representation
mround <- function (number, multiple) {
return(multiple * round(number / multiple))
}
DT = data.table(a = mround(112.3, 0.1), b = "B")
DT[a == 112.3,] # works as expected, i.e returns one row
DT[a == 112.3 & b == 'B', ] # doesn't work
Run Code Online (Sandbox Code Playgroud)
公平地说,data.frame
即使第一个过滤器也不起作用.任何想法如何解决?
我有一个data.table,列名不是有效的R名
DT = data.table(a = c(1, 2), `0b` = c(4, 5))
Run Code Online (Sandbox Code Playgroud)
我想用这样的东西
my_column <- "0b"
DT[, mean(eval(parse(text = my_column)))]
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误
Error in parse(text = my_column) : <text>:1:2: unexpected symbol
1: 0b
^
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做到这一点,即使用无效的列名作为j中的变量?