我有一个包含因子的数据框.当我使用factor或另一个索引函数创建此数据框的子集时,会创建一个新的数据框.但是,因子变量保留其所有原始级别 - 即使它们不存在于新数据框中.
这在进行分面绘图或使用依赖于因子水平的函数时会产生麻烦.
在我的新数据框中从一个因子中删除级别的最简洁方法是什么?
这是我的例子:
df <- data.frame(letters=letters[1:5],
numbers=seq(1:5))
levels(df$letters)
## [1] "a" "b" "c" "d" "e"
subdf <- subset(df, numbers <= 3)
## letters numbers
## 1 a 1
## 2 b 2
## 3 c 3
# all levels are still there!
levels(subdf$letters)
## [1] "a" "b" "c" "d" "e"
Run Code Online (Sandbox Code Playgroud) 在R代码中,您喜欢命名变量和函数的约定?
据我所知,有几种不同的惯例,所有这些惯例都在喧嚣的和谐中共存:
1.期间分隔符的使用,例如
stock.prices <- c(12.01, 10.12)
col.names <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)
优点: 在R社区中具有历史优先权,在整个R核心中普遍存在,并且由Google的R风格指南推荐.
缺点: 充满了面向对象的内涵,让R新手感到困惑
2.使用下划线
stock_prices <- c(12.01, 10.12)
col_names <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)
优点: 许多编程语言中的常见惯例; 受到Hadley Wickham风格指南的青睐,并在ggplot2和plyr包中使用.
缺点: R程序员历史上没有使用过; 令人烦恼地映射到Emacs-Speaks-Statistics中的'< - '运算符(可以用'ess-toggle-underscore'改编).
3.混合资本化的使用(camelCase)
stockPrices <- c(12.01, 10.12)
colNames <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)
优点:似乎在多个语言社区得到广泛采用.
缺点:有最近的先例,但没有历史使用(在R基础或其文档中).
最后,好像它没有足够的混淆,我应该指出谷歌风格指南争论变量的点符号,但函数的混合大写.
R包中缺乏一致的样式在几个层面上存在问题.从开发人员的角度来看,它使维护和扩展其他代码变得困难(尤其是其风格与您自己的风格不一致).从R用户的角度来看,不一致的语法通过将概念表达的方式相乘来加深R的学习曲线(例如,日期转换函数asDate(),as.date()或as_date()?不,它就是.日期()).
我在一个大型EC2 Ubuntu实例上运行R 2.9,加载了RAM,但是没有终端.当我加载具有显示依赖性的库,如sqldf包时,我收到以下错误:
library(sqldf)
...
Loading required package: tcltk
Loading Tcl/Tk interface ... Error in fun(...) : couldn't connect to display "localhost:11.0"
Error : .onLoad failed in 'loadNamespace' for 'tcltk'
Error: package 'tcltk' could not be loaded
Run Code Online (Sandbox Code Playgroud)
这似乎是一个普遍的问题,我想知道其他人是如何解决它的.安装X11服务器不是理想的解决方案.
我有一个包含多个时间序列返回的数据框,存储在列中.
第一列包含日期,后续列是独立的时间序列,每个列都有一个名称.列标题是变量名称.
## I have a data frame like this
t <- seq(as.Date('2009-01-01'),by='days',length=10)
X <- rnorm(10,0,1)
Y <- rnorm(10,0,2)
Z <- rnorm(10,0,4)
dat <- data.frame(t,X,Y,Z)
## which appears as
t X Y Z
1 2009-01-01 -1.8763317 -0.1885183 -6.655663
2 2009-01-02 -1.3566227 -2.1851226 -3.863576
3 2009-01-03 -1.3447188 2.4180249 -1.543931
Run Code Online (Sandbox Code Playgroud)
我想将每个时间序列绘制成一个单独的图上的一条线,在一个点阵中,每个图用变量名标记.
要使用晶格绘制此图,数据必须采用高格式,如下所示:
t symbol price
1 2009-01-01 X -1.8763317
2 2009-01-02 Y -0.1885183
2 2009-01-02 Z -6.655663
Run Code Online (Sandbox Code Playgroud)
这样做有什么好的函数调用?
我习惯在SQL写数据操作的逻辑,现在我正在学习RI发现自己有时只是想要做的东西,会在SQL简单,但我必须要学会为R一堆东西做在R相同的操作数据框.有简单的工作吗?
在R中创建移动平均线或滚动总和的最有效方法是什么?你如何与"分组"一起进行滚动功能?
r ×10
r-faq ×2
time-series ×2
average ×1
coding-style ×1
dataframe ×1
matrix ×1
memory-leaks ×1
r-factor ×1
sql ×1
sqldf ×1
statistics ×1
vector ×1
x11 ×1