当然我可以替换这样的特定参数:
mydata=c("á","é","ó")
mydata=gsub("á","a",mydata)
mydata=gsub("é","e",mydata)
mydata=gsub("ó","o",mydata)
mydata
Run Code Online (Sandbox Code Playgroud)
但是肯定有一种更容易的方法来完成这一切,对吧?我没有发现gsub帮助非常全面.
我无法在geom_text中设置我的字体.这是我尝试过的:
labels_test<-data.frame(a=c("a","b","c"),b=c(1:3),c=c(3:1))
# works
ggplot () + geom_text(data=labels_test,aes(b,c,label=a),color="blue")
# does not work:
ggplot () + geom_text(data=labels_test,aes(b,c,label=a),color="blue",family="Times")
# error message: In grid.Call.graphics(L_text, as.graphicsAnnot(x$label), x$x, x$y,:
# Font family not found in Windows font database
Run Code Online (Sandbox Code Playgroud)
我已经进口的所有字体指示在这里.什么问题还有什么问题?
我使用cut和classIntervals对R中的数据进行分组,稍后我将使用ggplot2进行绘图.因此,使用n = 3的分位数切割的基本操作将如下所示:
library(classInt)
a<-c(1,10,100,1000,100000,1000000)
b<-cut(a,
breaks=data.frame(
classIntervals(
a,n=3,method="quantile")[2])[,1],
include.lowest=T)
Run Code Online (Sandbox Code Playgroud)
在哪里b:
[1] [1,70] [1,70] (70,3.4e+04] (70,3.4e+04] (3.4e+04,1e+06] (3.4e+04,1e+06]
Levels: [1,70] (70,3.4e+04] (3.4e+04,1e+06]
Run Code Online (Sandbox Code Playgroud)
所以这个输出的第一行是一个带有我的分组数据的向量,我可以在ggplot2中使用它.但是,我希望标签不是用科学记数法来表示这个载体[1,70] (70,34000] (3400,1000000]
我怎么能得到这个?如果你有其他方法而不是cut和classInt来获得相同的结果,那么任何帮助都会受到赞赏.
我可以对R中的方法使用一些建议来确定最佳簇数,然后用不同的统计标准描述簇.我是R的新手,具有关于聚类分析统计基础的基本知识.
确定簇数的方法:在文献中,一种常用的方法是所谓的"Elbow-criterion",它比较不同簇解的平方差和(SSD).因此,SSD在分析中针对Cluster的数量绘制,并且通过识别图中的"肘"来确定最佳簇数(例如,这里:https://en.wikipedia.org/wiki/File:DataClustering_ElbowCriterion. JPG)这种方法是获得主观印象的第一种方法.因此,我想在R中实现它.互联网上的信息很少.这里有一个很好的例子:http://www.mattpeeples.net/kmeans.html作者还做了一个有趣的迭代方法,看看在多次重复聚类过程之后肘是否在某种程度上是稳定的(尽管如此,它是用于分区聚类方法而不是分层).文献中的其他方法包括所谓的"停止规则".MILLIGAN&COOPER相比,在他们的论文,这些停止规则30"用于确定数据集簇的数目程序的审查"(可在这里:http://link.springer.com/article/10.1007%2FBF02294245)发现Calinski和Harabasz的停止规则在蒙特卡洛评估中提供了最好的结果.在R中实现这一点的信息甚至更为稀疏.因此,如果有人曾经实施过这个或另一个停止规则(或其他方法),那么一些建议会非常有用.
统计描述聚类:为了描述聚类,我想使用均值和某种方差标准.我的数据是关于农业用地的数据,并显示每个市的不同作物的产量数量.我的目标是在我的数据集中找到类似的土地利用模式.
我为一个对象子集生成了一个脚本来进行第一次测试运行.它看起来像这样(脚本中的步骤解释,下面的来源).
#Clusteranalysis agriculture
#Load data
agriculture <-read.table ("C:\\Users\\etc...", header=T,sep=";")
attach(agriculture)
#Define Dataframe to work with
df<-data.frame(agriculture)
#Define a Subset of objects to first test the script
a<-df[1,]
b<-df[2,]
c<-df[3,]
d<-df[4,]
e<-df[5,]
f<-df[6,]
g<-df[7,]
h<-df[8,]
i<-df[9,]
j<-df[10,]
k<-df[11,]
#Bind the objects
aTOk<-rbind(a,b,c,d,e,f,g,h,i,j,k)
#Calculate euclidian distances including only the columns 4 to 24
dist.euklid<-dist(aTOk[,4:24],method="euclidean",diag=TRUE,upper=FALSE, p=2)
print(dist.euklid)
#Cluster with Ward
cluster.ward<-hclust(dist.euklid,method="ward")
#Plot the dendogramm. define …Run Code Online (Sandbox Code Playgroud) 我想学习如何在我的数据帧的特定列上应用函数,而不"排除"我的df中的其他列.例如,我想将一些特定列乘以1000,并保留其他列.
使用sapply函数,例如:
a<-as.data.frame(sapply(table.xy[,1], function(x){x*1000}))
Run Code Online (Sandbox Code Playgroud)
我得到新的数据帧,第一列乘以1000,但没有我在操作中没有使用的其他列.所以我的尝试就是这样做:
a<-as.data.frame(sapply(table.xy, function(x) if (colnames=="columnA") {x/1000} else {x}))
Run Code Online (Sandbox Code Playgroud)
但是这个没用.
我的解决方法是为两个数据帧提供另一行ID,然后将旧数据框与新创建的数据框合并以获得完整的数据帧.但我认为必须有更好的解决方案.不是吗?
当然,我可以手动命名列表中的对象,如下所示:
#create dfs
df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10))
df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9))
df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8))
#make them a list
list.1<-list(df1=df1,df2=df2,df3=df3)
Run Code Online (Sandbox Code Playgroud)
但如果让我说50个具有长名称的对象,它会做很多工作.那么有没有办法自动化这个并使列表中的名称与外部对象相同?
我喜欢使用工作区的想法.到目前为止,我总是保存整个工作区并将它们完全加载到现有项目中.但很多时候我只需要来自指定工作区的单个对象.是否有可能从另一个工作区中单独加载它们.
有时,将对象添加到现有工作空间会很不错.想象一下,例如,您有五个巨大的脚本,具有独立的巨大工作空间,您不希望将它们混合在一起,将它们全部放在一个工作空间中.所以现在你想只将五个劣质空间中的每一个的干净结果存储到另一个干净的工作空间......
所以论文是基本的任务:
# save entire workspace
save.image("mypath/myworkspace")
# load entire workspace
load ("mypath/myworkspace")
# save a single object (or several)
save (myobject,file="mypath/myworkspace")
# load a single object from an existing workspace
?
# add a single object to an existing workspace
?
Run Code Online (Sandbox Code Playgroud) 我无法理解plyr包的用法.我尝试使用它来分割存储在列表中的数据帧,应用函数,将结果存储为数据帧,并将数据帧再次组合为列表.所以给出以下数据:
#create test dfs
df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10),d=(c("a","b","c","a","a","b","b","a","c","d")))
df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9),d=(c("e","f","g","e","e","f","f","e","g")))
df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8),d=(c("h","i","j","h","h","i","i","h")))
#make them a list
list.1<-list(df1=df1,df2=df2,df3=df3)
Run Code Online (Sandbox Code Playgroud)
我想计算每个数据帧的d中定义的每个组的平均值.如果我只在一个数据帧上使用plyr(按组计算特定列的平均值),使用plyr包的可能性是:
ddply(df1,.(d),summarise, mean=mean(a))
Run Code Online (Sandbox Code Playgroud)
但是如何将其应用于数据框中的每一列以及列表中的每个数据框?我如何重新编码所有数据,以便最终得到一个包含结果的matrizes列表?对不起这个非常基本的问题,但我是R的新手,我一直试图解决这个问题很长一段时间...... thx.
我想在ggplot2中外化我的布局,因为我的代码变得非常拥挤.
可以说我有一个给定的布局,我应用于不同功能的几个图.它看起来像这样:
scale_fill_gradientn(guide="colourbar",colours=costum.colorbar_sand.blue.green)+
theme (legend.title = element_text(size = 15,family="Arial"))+
theme (legend.text = element_text(size = 12,family="Arial",angle=45))+
theme (legend.position = "bottom")+
coord_map(projection="mercator");
Run Code Online (Sandbox Code Playgroud)
我想把它放在外部文件或对象中,然后将其调用到我的绘图函数中.
我尝试了knitr包中的 read_chunk :我将空白代码保存在R文件中,然后尝试在我的函数中实现它.因此我只是把它写成这样的函数
function.xy(...){...some ggplot function...
read_chunk("some\path")
}
Run Code Online (Sandbox Code Playgroud)
但它没有成功.我也尝试过,paste(read_chunk("some\path"))但这不会起作用.
我的另一个想法是将它保存为一个对象而只是粘贴文本,但这不太合适,因为我不知道如何将它保存为纯文本对象(如果有类似的东西) .任何人都可以建议我如何做到这一点?
我想从直方图中排除所有零值.到现在为止做的,所以我创建了一个新的对象,并转化所有零个值到NAS但我希望将有没有创建新的对象一些更简单的方法.
示例代码:
set.seed(45)
a<-sample(0:10,500,replace=T)
c<-ifelse(a!=0,a,NA)
hist(c)
Run Code Online (Sandbox Code Playgroud)