我有以下结构的数据:
x <- read.table(header=T, text="
X Y D S
a e 1 10
a e 2 20
a f 1 50
b c 1 40
b c 2 30
b c 3 60
b d 1 10
b d 2 20")
Run Code Online (Sandbox Code Playgroud)
我希望得到以下结果:
X Y 1 2 3
a e 10 20
a f 50
b c 40 30 60
b d 10 20
Run Code Online (Sandbox Code Playgroud)
对于列的每个组合X和Y我想转列数据S的顺序列D.
我认为xtabs()会有用,但我不这么认为,我最好的版本是:
xtabs(formula=S~Y+D,data=x)
Run Code Online (Sandbox Code Playgroud)
结果如下:
D
Y 1 …Run Code Online (Sandbox Code Playgroud) 我对PostgreSQL中的concat函数有疑问.
这句话适用于MySQL:
SELECT * FROM words
WHERE CONCAT (word,' ',gender,' ',semantic) LIKE '%"+value+"%'.
Run Code Online (Sandbox Code Playgroud)
Value是在我的Java程序中更改的变量.
但我需要在postgresql中使用相同的工作.我是如何使用postgres在WHERE子句中连接的,考虑变量"value"将使其值发生变化?
我有一个Shiny应用程序,根据选定的选项(列)动态重新计算数据集.重新计算的结果用于向用户显示另一组选项并创建绘图.
目前我正在使用observe()读取用户选择,重新计算数据集和更新UI.但是,当显示输出(绘图)时,我必须再次重新计算,因为observe()不返回任何内容.
有没有办法如何只重新计算一次数据集?
我创建了一个简单的例子来说明这一点:
library(devtools)
library(shiny)
runGist('7333949')
Run Code Online (Sandbox Code Playgroud)
在server.R我想有一个调用自定义函数AggregateData中observe(),并在没有呼叫renderUI().
应用代码:
server.R:
# shiny server side code for each call
shinyServer(function(input, output, session){
#update variable and group based on dataset
observe({
require(sqldf)
if (is.null(input$source_columns)) {
obj <-TestData
} else {
obj<-AggregateData(TestData,Columns=input$source_columns)
}
var.opts<-namel(colnames(obj))
var.opts.original.slicers <- namel(colnames(TestData))
measures <- c('m1','m2','m3','m4','m5')
var.opts.slicers <- var.opts[!(var.opts %in% c(measures,'x'))]
var.opts.original.slicers <- var.opts.original.slicers[!(var.opts.original.slicers %in% c(measures,'x'))]
var.opts.measures <- var.opts[var.opts %in% measures]
updateSelectInput(session, "source_columns", choices = …Run Code Online (Sandbox Code Playgroud) 如何在Shiny中定义数据表的数字格式?我想只为某些列显示2位小数,但不明白应该在我的应用程序中定义它的位置.在server.R或ui.R?在server.R,我所拥有的renderDataTable:
output$woeTable <- renderDataTable({
input$tryTree
input$threshold
# The following returns data frame with numeric columns
get(input$dfDescr)[['variables']][[input$columns]][['woe']]
},
options=list(
paging = FALSE,
searching = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
如何格式化第2和第3列以仅显示两位小数?
有没有一种标准方法如何表明R包是专有的,由公司拥有,不应该在公司外共享?现在,我在DESCRIPTION文件中使用这个:
License: Proprietary, ownership of XX Company
Run Code Online (Sandbox Code Playgroud) 有没有办法如何将以下结果转换为数组?
select pg_tables from pg_tables
Run Code Online (Sandbox Code Playgroud)
这将仅返回一列,但数据类型不是数组.
编辑:我正在使用PostgreSql 9.1.4
更新:我需要等效的以下SQL语句,而不需要编写适用于每个表的列名:
select
string_to_array(
schemaname || '|' ||
tablename || '|' ||
tableowner || '|' ||
coalesce(tablespace,'') || '|' ||
hasindexes || '|' ||
hasrules || '|' ||
hastriggers
,'|')
from
pg_tables
Run Code Online (Sandbox Code Playgroud) 在开始日期和结束日期之前,我需要生成一系列季度.我知道generate_series(),但它不适用于quarter:
SELECT * FROM generate_series('2008-01-01 00:00'::timestamp,'2009-01-01 12:00', '1 quarter');
Run Code Online (Sandbox Code Playgroud)
是什么让季度如此特别?除此以外generate_series()可以使用几乎所有东西,从微秒到千禧年:
select * from generate_series('2008-01-01 00:00'::timestamp,'2008-01-01 00:00:00.001', '1 microsecond');
select * from generate_series('2008-01-01 00:00'::timestamp,'2008-01-01 00:01', '1 second');
select * from generate_series('2008-01-01 00:00'::timestamp,'2008-01-01 01:00', '1 minute');
select * from generate_series('2008-01-01 00:00'::timestamp,'2008-01-01 12:00', '1 hour');
select * from generate_series('2008-01-01 00:00'::timestamp,'2009-01-01 12:00', '1 day');
select * from generate_series('2008-01-01 00:00'::timestamp,'2009-01-01 12:00', '1 week');
select * from generate_series('2008-01-01 00:00'::timestamp,'2009-01-01 12:00', '1 month');
select * from generate_series('2008-01-01 00:00'::timestamp,'2009-01-01 12:00', '1 year'); …Run Code Online (Sandbox Code Playgroud) 因为data frames没有na.print 选择.是否有任何解决方法来抑制NA的显示?
样本数据框:
df <- data.frame(
x=c("a","b","c","d"),
a=c(1,1,1,1),
b=c(1,1,1,NA),
c=c(1,1,NA,NA),
d=c(1,NA,NA,NA))
df
Run Code Online (Sandbox Code Playgroud)
结果是:
x a b c d
1 a 1 1 1 1
2 b 1 1 1 NA
3 c 1 1 NA NA
4 d 1 NA NA NA
Run Code Online (Sandbox Code Playgroud)
但我想表明:
x a b c d
1 a 1 1 1 1
2 b 1 1 1
3 c 1 1
4 d 1
Run Code Online (Sandbox Code Playgroud) 如何获取当前环境中可用的数据框名称向量?我试过了:
sapply(ls(), is.data.frame)
Run Code Online (Sandbox Code Playgroud)
但这失败了因为ls返回字符串的向量.我打算使用此列表作为Shiny app中动态选择的输入.
给定一个向量,我想创建一个方形矩阵,其中向量的元素在对角线上,并且有行的cumsum元素.
示例向量:
vec <- c(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
所需输出:
[,1] [,2] [,3] [,4]
[1,] 1 3 6 10
[2,] 0 2 5 9
[3,] 0 0 3 7
[4,] 0 0 0 4
Run Code Online (Sandbox Code Playgroud)
现在,我使用双循环功能:
diagSum <- function(vec) {
mat <- diag(vec)
for (i in seq(nrow(mat))) {
for (j in seq(i, ncol(mat))) {
if (j > i) {
mat[i, j] <- mat[i, j - 1] + mat[j, j]
}
}
}
mat
}
Run Code Online (Sandbox Code Playgroud)
这样做的R-way(避免循环)是什么?