Tag: r

用dplyr总结多个列?

我用dplyr语法挣扎了一下。 我有一个数据框与不同的variables和一个分组variables。 现在我想计算每个组内每列的平均值,在R中使用dplyr。 df <- data.frame(a=sample(1:5, 10, replace=T), b=sample(1:5, 10, replace=T), c=sample(1:5, 10, replace=T), d=sample(1:5, 10, replace=T), grp=sample(1:3, 10, replace=T)) df %>% group_by(grp) %>% summarise(mean(a)) 这给了我指出“grp”表示的每个组的列“a”的意思。 我的问题是:是否有可能一次获得每个组中的每列的手段? 或者是否必须为每列重复df %>% group_by(grp) %>% summarise(mean(a)) ? 我想要的是类似的东西 df %>% group_by(grp) %>% summarise(mean(a:d)) # "mean(a:d)" does not work

R中的智能点标签放置

1)是否有R库/函数在R图中实现INTELLIGENT标签的放置? 我尝试了一些,但是它们都是有问题的 – 许多标签是彼此重叠或其他点(或者情节中的其他物体,但是我看到这很难处理)。 2)如果没有,有没有办法如何COMFORTABLY帮助algorithm与特定问题点的标签位置? 最需要舒适和高效的解决scheme。 你可以用我可重复的例子来玩和testing其他的可能性,看看你是否能够获得比我更好的结果: # data x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 0.9055, 1.3307) y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 0.9717, 0.9357) ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", "SaxRub", "TurMer", "TurPil", "TurPhi") # basic plot plot(x, y, asp=1) abline(h = 1, col […]

如何在数据框中按名称删除列

我有一个大型的数据集,我想阅读特定的列或删除所有其他人。 data <- read.dta("file.dta") 我select我不感兴趣的列: var.out <- names(data)[!names(data) %in% c("iden", "name", "x_serv", "m_serv")] 比我想要做的事情如: for(i in 1:length(var.out)) { paste("data$", var.out[i], sep="") <- NULL } 删除所有不需要的列。 这是最佳的解决scheme吗?

在数据框中按组来折叠文本

如何在列group汇总数据框,并在列text折叠text ? 示例数据: df <- read.table(header=T, text=" group text a a1 a a2 a a3 b b1 b b2 c c1 c c2 c c3 ") 所需输出(dataframe): group text a a1a2a3 b b1b2 c c1c2c3 我现在有: sapply(unique(df$group), function(x) { paste0(df[df$group==x,"text"], collapse='') }) 这在一定程度上起作用,因为它返回的文本正确地按组来分解,但作为一个vector: [1] "a1a2a3" "b1b2" "c1c2c3" 我需要一个带有group列的数据框。

aes中的局部variables

我试图在aes使用局部variables时,我与ggplot的情节。 这是我的问题归结为本质: xy <- data.frame(x=1:10,y=1:10) plotfunc <- function(Data,YMul=2){ ggplot(Data,aes(x=x,y=y*YMul))+geom_line() } plotfunc(xy) 这会导致以下错误: Error in eval(expr, envir, enclos) : object 'YMul' not found 看起来好像我不能在aes使用局部variables(或函数参数)。 难道是由于aes的内容在局部variables超出范围的时候被执行了吗? 我怎样才能避免这个问题(除了不使用aes内的局部variables)?

在我自己的包中使用data.table包

我正在尝试在我自己的包中使用data.table包。 MWE如下: 我创build一个函数test.fun,它只是创build一个小的data.table对象,然后用“A”列对“Val”列进行求和。 代码是 test.fun<-function () { library(data.table) testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25)) setkey(testdata, A) res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"] return(res) } 当我在常规R会话中创build此函数,然后运行该函数时,它按预期工作。 > res<-test.fun() data.table 1.8.0 For help type: help("data.table") > res A Ct Total Avg [1,] 1 5 -0.5326444 -0.1065289 [2,] 2 5 -4.0832062 -0.8166412 [3,] 3 5 0.9458251 0.1891650 [4,] 4 5 2.0474791 0.4094958 [5,] 5 5 2.3609443 […]

R如何用小数秒格式化POSIXct

我相信R不正确地格式POSIXcttypes与小数秒。 我通过R-BUG提交这个作为一个增强请求,并被刷新为“我们认为当前的行为是正确的 – 删除了错误”。 虽然我非常感谢他们已经做的和继续做的工作,但是我想让其他人对这个问题有所了解,也许就如何更有效地说明问题提出build议。 这里是一个例子: > tt <- as.POSIXct('2011-10-11 07:49:36.3') > strftime(tt,'%Y-%m-%d %H:%M:%OS1') [1] "2011-10-11 07:49:36.2" 也就是说,tt被创build为POSIXct时间的小数部分.3秒。 当用十进制数字打印时,显示的数值是.2。 我用毫秒精度的时间标记工作了很多,这使我很头痛,时间往往比实际值低一个档次。 这是发生了什么事情:POSIXct是自纪元以来的浮点数。 所有的整数值都是精确处理的,但是在基数为2的浮点数中,与.3最接近的值比.3略小。 strftime()对格式%OSn的规定行为是向下取整到所要求的十进制数字,所以显示的结果是.2。 对于其他小数部分,浮点值略高于input的值,显示器给出了预期的结果: > tt <- as.POSIXct('2011-10-11 07:49:36.4') > strftime(tt,'%Y-%m-%d %H:%M:%OS1') [1] "2011-10-11 07:49:36.4" 开发者的观点是,对于时间types,我们应该总是舍入到要求的精度。 例如,如果时间是11:59:59.8那么打印格式为%H:%M应该是“11:59”而不是“12:00”, %H:%M:%S应该给“11: 59:59“不是”12:00:00“。 我同意整数秒和格式标志%S ,但我认为这种行为应该是不同的devise为小数部分秒的格式标志。 我希望%OSn在n = 0时使用从最近到最近的行为,而%S使用向下舍入,因此使用格式%H:%M:%OS0打印11:59:59.8会给出“12: 00:00" 。 这不会影响秒数的整数,因为这些总是精确地表示,但它更自然地处理小数秒的舍入误差。 这是如何处理小数部分的打印,例如C,因为整数铸造舍弃: double x = 9.97; printf("%d\n",(int) x); // […]

在ggplot2(R)中强制原点从0开始

我怎样才能在ggplot2中设置y轴和x轴的原点/截取点? x轴的线应该恰好在y = Z处。 Z = 0或另一个给定的值。

查找重复行的索引

R中复制的函数执行重复行search。 如果我们想删除重复项,我们只需要编写df[!duplicated(df),] ,重复项将从数据框中删除。 但是如何find重复数据的索引呢? 如果duplicated在某一行返回TRUE,则意味着这是dataframe中这样一行的第二次发生,并且其索引可以很容易地获得。 如何获得该行第一次出现的索引? 换句话说,一个与重复行相同的索引? 我可以在data.frame上做一个循环,但是我认为在这个问题上有一个更优雅的答案。

如何将matrix子集合到一列,维护matrix数据types,维护行列名?

当我将一个matrix子集到一个列时,结果是类数字,而不是matrix(即myMatrix [,5]子集到第五列)。 有没有一种紧凑的方法来join一个列,维护matrix格式,并维护行/列名,而不需要做一些复杂的事情: matrix( myMatrix[ , 5 ] , dimnames = list( rownames( myMatrix ) , colnames( myMatrix )[ 5 ] )