我们如何使用其数字索引(位置)的向量选择多个列data.table
?
这就是我们如何处理data.frame
:
df <- data.frame(a = 1, b = 2, c = 3)
df[ , 2:3]
# b c
# 1 2 3
Run Code Online (Sandbox Code Playgroud) 我正在使用该函数ifelse()
来操作日期向量.我期望结果是类Date
,并且很惊讶地得到了一个numeric
向量.这是一个例子:
dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'))
dates <- ifelse(dates == '2011-01-01', dates - 1, dates)
str(dates)
Run Code Online (Sandbox Code Playgroud)
这尤其令人惊讶,因为在整个向量上执行操作会返回一个Date
对象.
dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04','2011-01-05'))
dates <- dates - 1
str(dates)
Run Code Online (Sandbox Code Playgroud)
我应该使用其他功能来操作Date
矢量吗?如果是这样,有什么功能?如果没有,我如何强制ifelse
返回与输入相同类型的向量?
帮助页面ifelse
表明这是一个功能,而不是一个错误,但我仍然在努力寻找一个解释我发现的令人惊讶的行为.
df <- data.frame(var1 = c('a', 'b', 'c'), var2 = c('d', 'e', 'f'),
freq = 1:3)
Run Code Online (Sandbox Code Playgroud)
扩展上面data.frame的前两列的最简单方法是什么,以便每行显示"freq"列中指定的次数?
换句话说,从这里开始:
df
var1 var2 freq
1 a d 1
2 b e 2
3 c f 3
Run Code Online (Sandbox Code Playgroud)
对此:
df.expanded
var1 var2
1 a d
2 b e
3 b e
4 c f
5 c f
6 c f
Run Code Online (Sandbox Code Playgroud) 我正在使用具有离散x刻度的ggplot制作一个躲闪条形图,x轴现在按字母顺序排列,但我需要重新排列它以便按y轴的值排序(即,最高的条形将位于左侧).
我尝试了排序或排序,但结果是对x轴进行排序,而不是分别对条形进行排序.
我做错了什么?
我有两个水平对齐的ggplots grid.arrange
.我查看了很多论坛帖子,但我尝试的所有内容似乎都是现在更新并命名为其他内容的命令.
我的数据看起来像这样;
# Data plot 1
axis1 axis2
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.417117 -0.002592
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.186860 -0.203273
# Data plot 2
axis1 axis2
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
#And I run this:
library(ggplot2)
library(gridExtra)
groups=c('group1','group2','group3','group4','group1','group2','group3','group4')
x1=data1[,1]
y1=data1[,2]
x2=data2[,1]
y2=data2[,2]
p1=ggplot(data1, aes(x=x1, y=y1,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8) …
Run Code Online (Sandbox Code Playgroud) 这是关于data.table连接语法的一个哲学问题.我发现data.tables的用途越来越多,但仍在学习......
X[Y]
data.tables 的连接格式非常简洁,方便和高效,但据我所知,它只支持内连接和右外连接.要获得左外部或全外部连接,我需要使用merge
:
X[Y, nomatch = NA]
- Y中的所有行 - 右外连接(默认)X[Y, nomatch = 0]
- 只有在X和Y中都匹配的行 - 内连接merge(X, Y, all = TRUE)
- 来自X和Y的所有行 - 完全外部连接merge(X, Y, all.x = TRUE)
- X中的所有行 - 左外连接在我看来,如果X[Y]
连接格式支持所有4种类型的连接,那将会很方便.有没有理由只支持两种类型的连接?
对我来说,nomatch = 0
和nomatch = NA
参数值对于正在执行的操作不是非常直观.这是我更容易理解和记忆的merge
语法:all = TRUE
,all.x = TRUE
和all.y = TRUE
.由于X[Y]
操作类似于merge
远远不止match
,为什么不使用merge
的连接,而不是语法match
功能的nomatch
参数?
以下是4种连接类型的代码示例:
# …
Run Code Online (Sandbox Code Playgroud) 我的数据框有一些数值变量和一些分类factor
变量.这些因素的等级顺序不是我希望它们的方式.
numbers <- 1:4
letters <- factor(c("a", "b", "c", "d"))
df <- data.frame(numbers, letters)
df
# numbers letters
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
Run Code Online (Sandbox Code Playgroud)
如果我更改了级别的顺序,则这些字母不再带有相应的数字(我的数据从这一点开始是完全无意义的).
levels(df$letters) <- c("d", "c", "b", "a")
df
# numbers letters
# 1 1 d
# 2 2 c
# 3 3 b
# 4 4 a
Run Code Online (Sandbox Code Playgroud)
我只想更改级别顺序,因此在绘图时,条形图按所需顺序显示 - 可能与默认的字母顺序不同.
我有一个yearmon
对象:
require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"
Run Code Online (Sandbox Code Playgroud)
如何从中提取月份和年份?
month1 <- fn(date1)
year1 <- fn(date1)
Run Code Online (Sandbox Code Playgroud)
我应该用什么功能代替 fn()
data.table
x
鉴于列名称的字符向量,我想重新排序我的列neworder
:
library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")
Run Code Online (Sandbox Code Playgroud)
显然我可以这样做:
x[ , neworder, with = FALSE]
# or
x[ , ..neworder]
# c b a
# 1: 0.8476623 3 1
# 2: 0.4787768 2 2
# 3: 0.3570803 1 3
Run Code Online (Sandbox Code Playgroud)
但这需要再次复制整个数据集.还有另一种方法吗?
如何从此代码生成的图例中删除字母"a"?如果我删除了geom_text
,那么'a'字母将不会显示在图例中.不过我想保留geom_text
.
ggplot(data = iris, aes(x = Sepal.Length, y=Sepal.Width, shape = Species, colour = Species)) +
geom_point() +
geom_text(aes(label = Species))
Run Code Online (Sandbox Code Playgroud) r ×10
data.table ×3
ggplot2 ×3
aesthetics ×1
dataframe ×1
datetime ×1
gridextra ×1
if-statement ×1
join ×1
legend ×1
levels ×1
r-faq ×1
replicate ×1