我正在处理来自问卷的SPSS数据,该问卷必须源自M $ Word.Word会自动将连字符更改为长连字符,并转换为无法正确显示的字符,即" - "变为"ú".
我的问题:WINDOWS-1252字符集中的utf8ToInt()等价是什么?
utf8ToInt("A")
[1] 65
Run Code Online (Sandbox Code Playgroud)
当我使用自己的数据执行此操作时,出现错误:
x <- str_sub(levels(sd$j1)[1], 7, 7)
print(x)
[1] "ú"
utf8ToInt(x)
Error in utf8ToInt(x) : invalid UTF-8 string
Run Code Online (Sandbox Code Playgroud)
但是,x的内容在grep和gsub表达式中完全可用.
> Sys.getlocale()
[1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
Run Code Online (Sandbox Code Playgroud) 我在整个网站和包中搜索了很多关于热图的问题,但我仍然有问题.
我有集群数据(kmeans/EM/DBscan ..),我想通过对同一个集群进行分组来创建热图.我希望将相似的颜色模式分组到热图中,因此通常看起来像块对角线.
我尝试按簇号排序数据并显示它,
k = kmeans(data, 3)
d = data.frame(data)
d = data.frame(d, k$cluster)
d = d[order(d$k.cluster),]
heatmap(as.matrix(d))
Run Code Online (Sandbox Code Playgroud) 但它仍然没有排序,看起来像这个链接:

数据是一系列日期和时间.
date time
2010-01-01 09:04:43
2010-01-01 10:53:59
2010-01-01 10:57:18
2010-01-01 10:59:30
2010-01-01 11:00:44
…
Run Code Online (Sandbox Code Playgroud)
我的目标是用水平轴(x)上的日期和垂直轴(y)上的时间来表示散点图.我想如果同一天的时间不止一次,我也可以添加颜色强度.
创建日期直方图非常容易.
mydata <- read.table("mydata.txt", header=TRUE, sep=" ")
mydatahist <- hist(as.Date(mydata$day), breaks = "weeks", freq=TRUE, plot=FALSE)
barplot(mydatahist$counts, border=NA, col="#ccaaaa")
Run Code Online (Sandbox Code Playgroud)
任何帮助,RTFM URI打包或提示都是受欢迎的.
我有以下查找表:
lkp <- data.frame(
x=c(0,0.2,0.65,0.658,1.3,1.76,2.7),
y=c(1,1,1,0.942,0.942, 0.92, 0.89)
)
Run Code Online (Sandbox Code Playgroud)
我想得到给定X值的Y值.
如果表中存在X值,则应返回表的确切Y. 如果X值不存在,那么Y值应该作为2个最近邻居(仅2个最近邻居)的线性插值返回.我不想让模型适合整体数据.
对于上表
for X=0.2 Y=1 (exact lookup)
for X=2 Y=0.91 (linear interpolation between the last 2 rows of the data frame)
Run Code Online (Sandbox Code Playgroud)
有没有准备好的功能呢?
我想找到一组函数并保存它们,因为我想将它们发送到Rdata文件中的远程服务器,我不想在服务器上安装新的软件包.
虽然我使用下面的方法收到错误,但欢迎使用更简单/更好的方法.
MWE:
这是两个虚函数:
abcd.fun.1 <- function() return(1)
abcd.fun.2 <- function() return(2)
Run Code Online (Sandbox Code Playgroud)
我可以识别虚函数:
ls()[grep('abcd', ls())]
Run Code Online (Sandbox Code Playgroud)
但是当我将它包装在一个函数中时:
find.test <- function(x) {
return(ls()[grep(x, ls())])
}
find.test('abcd')
Run Code Online (Sandbox Code Playgroud)
该函数返回 character(0)
最终我想
save(find.test('abcd'), file = test.Rdata)
Run Code Online (Sandbox Code Playgroud) 我正在使用mlogitR包.
使用以下方法导入数据后:
t <-read.csv('junk.csv',header=TRUE, sep=",", dec=".")
Run Code Online (Sandbox Code Playgroud)
并致电:
x <- mlogit.data(t,choice="D",shape="long",id.var="key",alt.var="altkey")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error in `row.names<-.data.frame`(`*tmp*`, value = c("1.1", "1.2", "1.3", :
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names': ‘1.1’, ‘1.2’, ‘1.3’, ‘1.4’, ‘1.5’, ‘1.6’
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决它?
我的数据在csv文件中以以下格式存在:
[junk.csv]
key,altkey,A,B,C,D
201005131,1,2.6,118.17,117,0
201005131,2,1.4,117.11,115,0
201005131,3,1.1,117.38,122,1
201005131,4,24.6,,122,0
201005131,5,48.6,91.90,122,0
201005131,6,59.8,,122,0
201005132,1,20.2,118.23,113,0
201005132,2,2.5,123.67,120,1
201005132,3,7.4,116.30,120,0
201005132,4,2.8,118.86,120,0
201005132,5,6.9,124.72,120,0
201005132,6,2.5,123.81,120,0
201005132,7,8.5,119.23,115,
Run Code Online (Sandbox Code Playgroud) 我希望实现以下结果:
我能做的最好的事情如下,但我需要一个更通用的解决方案,其中计算maxSize的值而不是硬编码.如果我在传统的R图中这样做,我会使用par("pin")来计算绘图区域的大小并向后工作,但我无法弄清楚如何使用ggplot2访问此信息.有什么建议?
library(ggplot2)
agData = data.frame(
class=rep(1:7,3),
drv = rep(1:3,rep(7,3)),
freq = as.numeric(xtabs(~class+drv,data = mpg))
)
agData = agData[agData$freq != 0,]
rng = range(agData$freq)
mn = rng[1]
mx = rng[2]
minimumArea = mx - mn
maxSize = 20
minSize = max(1,maxSize * sqrt(mn/mx))
qplot(class,drv,data = agData, size = freq) + theme_bw() +
scale_area(range = c(minSize,maxSize),
breaks = seq(mn,mx,minimumArea/4), limits = rng)
Run Code Online (Sandbox Code Playgroud)
这是迄今为止的样子:

我想评估一些代码在不同版本的R中的性能.原则上这很容易:
system.time()测量所花费的时间来运行一段代码现在,我想使用knitr创建报告来执行此操作.所以,在我看来,我需要一种机制来在每个块中启动一个新的会话.
我该怎么做呢?
一些示例knitr 降价代码用作演示.此代码使用图形绘制ggplot,但显然两个版本都返回相同的时序,因为我不知道如何为每个块启动新版本的R.
Comparison of R performance
========================================================
# Do analysis in R version 2.14
```{r fig.width=6, fig.height=3}
library(ggplot2)
data(diamonds)
system.time({
p <- ggplot(diamonds, aes(carat, price/carat, colour=clarity)) + geom_point()
print(p)
})
```
# Repeat same analysis in R 2.15
```{r fig.width=6, fig.height=3}
library(ggplot2)
data(diamonds)
system.time({
p <- ggplot(diamonds, aes(carat, price/carat, colour=clarity)) + geom_point()
print(p)
})
```
Run Code Online (Sandbox Code Playgroud) 当我安装yaml软件包时,如果以前安装过,则会在RStudio中弹出恼人的错误消息.如何判断软件包是否已安装,以便我可以在代码中决定是否安装软件包?
消息在弹出窗口中,它是:
当前加载了将由此安装更新的一个或多个软件包.强烈建议在更新这些软件包之前重新启动R. RStudio可以重新启动R,然后在重新启动后自动继续安装(在重新启动期间将保留所有工作和数据).您想在安装之前重启R吗?
我一直在使用该xtable包从R矩阵中创建HTML表.当我kable在循环中使用该函数时,它没有输出任何内容.所以我盯着使用这个print功能.问题是,当我使用print函数时,我会在HTML表格中打印出很多"##".有没有办法打印我的kable但在循环中避免每行"##"?
library("xtable", lib.loc="~/R/win-library/3.1")
for(i in 1:3) {
#Must use print because of the loop, but get ## per line
print(kable(head(cars), "html", table.attr='class="flat-table"'))
}
#No neded to use print, no ## printed per line
kable(head(cars), "html", table.attr='class="flat-table"')
Run Code Online (Sandbox Code Playgroud) r ×10
ggplot2 ×3
knitr ×2
environment ×1
grep ×1
heatmap ×1
lookup ×1
loops ×1
rstudio ×1
scatter-plot ×1
time-series ×1