Tag: r

将年份和月份(“yyyy-mm”格式)转换为date?

我有一个这样的数据集: Month count 2009-01 12 2009-02 310 2009-03 2379 2009-04 234 2009-05 14 2009-08 1 2009-09 34 2009-10 2386 我想绘制数据(月份作为x值,并计为y值)。 由于数据中有空白,我想将本月的信息转换为date。 我试过了: as.Date("2009-03", "%Y-%m") 但它没有工作。 怎么了? 看来,date()也需要一天,不能为一天设置一个标准值? 哪个function解决了我的问题?

用于访问列表或数据框元素的和]符号之间的区别

R提供了两种不同的方法来访问列表或data.frame的元素[]和[[]]运算符。 两者有什么区别? 在什么情况下我应该使用一个在另一个之上?

在子集数据框中放置因子水平

我有一个数据框包含一个因素。 当我使用subset()或其他索引函数创build此数据框的subset() ,会创build一个新的数据框。 但是,因素variables保留了所有的原始级别 – 即使它们不存在于新的数据框架中。 这在创build多面绘图或使用依赖于因子级别的函数时会产生麻烦。 在我的新数据框架中从一个因素中删除层次的最简洁的方法是什么? 这是我的例子: 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 ## but the levels are still there! levels(subdf$letters) ## [1] "a" "b" "c" […]

将每列中的一个列折叠/连接/聚合为单个逗号分隔的string

我想根据两个分组variables在数据框中聚合一列,并用逗号分隔各个值。 这里是一些数据: data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = rep(1:2, 3), C = c(5:10)) data # ABC # 1 111 1 5 # 2 111 2 6 # 3 111 1 7 # 4 222 2 8 # 5 222 1 9 # 6 222 2 10 “A”和“B”是分组variables,“C”是我想折叠成逗号分隔string的variables。 我努力了: library(plyr) ddply(data, .(A,B), […]

将三列数据框重塑为matrix(“长”到“宽”格式)

我有一个data.frame看起来像这样。 xa 1 xb 2 xc 3 ya 3 yb 3 yc 2 我想要这个matrixforms,所以我可以喂它到热图做一个情节。 结果应该如下所示: abc x 1 2 3 y 3 3 2 我已经尝试从重塑包转换,我已经尝试编写一个手动function来做到这一点,但我似乎并没有得到正确的。

为什么“比'subset`好?

当我需要过滤data.frame,即提取符合某些条件的行时,我更愿意使用subset函数: subset(airquality, Month == 8 & Temp > 90) 而不是[function: airquality[airquality$Month == 8 & airquality$Temp > 90, ] 我的偏好主要有两个原因: 我发现代码从左到右读得更好。 即使对R一无所知的人也可以知道上面的subset声明在做什么。 因为列可以被称为selectexpression式中的variables,所以我可以节省一些击键。 在我上面的例子中,我只需要用subset键入一次airquality ,而用[ 。 所以我活得很开心,到处都是使用subset ,因为它更短,读起来更好,甚至向我的R编码者提倡它的美。 但是昨天我的世界分崩离析了。 在阅读subset文档时,我注意到这个部分: 警告 这是一个交互式使用的便利function。 对于编程,最好使用标准的子集函数,特别是参数子集的非标准评估可能会有意想不到的后果。 有人能帮助澄清作者的意思吗? 首先,“ 交互使用 ”是指什么? 我知道什么是交互式会话,而不是脚本在BATCH模式下运行,但是我不知道应该做什么区别。 那么能否解释“ 论证子集的非标准评估 ”,为什么它是危险的,也许可以举个例子呢?

用2个y轴绘制,左边是一个y轴,右边是另一个y轴

我需要在一个图表中显示计数和显示比率的折线图,我可以单独做这两个,但是当我把它们放在一起时,第一层(即geom_bar )的比例与第二层(即geom_line )。 我可以将geom_line的轴向右移动吗?

将数据框的列拆分为多个列

我想收集表格的数据 before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2')) attr type 1 1 foo_and_bar 2 30 foo_and_bar_2 3 4 foo_and_bar 4 6 foo_and_bar_2 并在上面的“ type ”列上使用split()来得到如下所示的结果: attr type_1 type_2 1 1 foo bar 2 30 foo bar_2 3 4 foo bar 4 6 foo bar_2 我想出了一些令人难以置信的复杂的事情,涉及到某种forms的工作,但我从那以后就错了。 成为最好的方法似乎太复杂了。 我可以像下面那样使用strsplit ,但是不清楚如何将它们回到数据框中的2列。 > strsplit(as.character(before$type),'_and_') [[1]] [1] "foo" "bar" [[2]] [1] […]

同时合并列表中的多个data.frames

我有我想要合并的许多data.frames的列表。 这里的问题是,每个data.frame在行数和列数方面有所不同,但它们都共享关键variables(在下面的代码中我称之为"var1"和"var2" )。 如果数据框架在列方面是相同的,那么我只能用rbind来表示,plyr的rbind.fill会做这个工作,但是这些数据并不是这样。 由于merge命令只适用于2个data.frames,所以我转向Internet寻求想法。 我从这里得到了这个,在R 2.7.2中完美的工作,这正是我当时所做的: merge.rec <- function(.list, …){ if(length(.list)==1) return(.list[[1]]) Recall(c(list(merge(.list[[1]], .list[[2]], …)), .list[-(1:2)]), …) } 我会这样调用函数: df <- merge.rec(my.list, by.x = c("var1", "var2"), by.y = c("var1", "var2"), all = T, suffixes=c("", "")) 但是在2.7.2之后的任何R版本中,包括2.11和2.12,这段代码都会失败,并出现以下错误: Error in match.names(clabs, names(xi)) : names do not match previous names (可以肯定的是,我在其他地方看到其他引用,没有解决scheme)。 有什么办法可以解决这个问题吗?

汇总/汇总每个组的多个variables(即总和,平均值等)

从数据框架,有一个简单的方法来同时聚合(即总结)多个variables吗? 以下是一些示例数据: library(lubridate) days = 365*2 date = seq(as.Date("2000-01-01"), length = days, by = "day") year = year(date) month = month(date) x1 = cumsum(rnorm(days, 0.05)) x2 = cumsum(rnorm(days, 0.05)) df1 = data.frame(date, year, month, x1, x2) 我想同时按年份和月份从df2dataframe中汇总x1和x2variables。 以下代码聚合了x1variables,但是是否也可以同时聚合x2variables? ### aggregate variables by year month df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE) head(df2) 任何build议将不胜感激。